This makes Advertisement and Service definitions declarative by
factoring out parsing logic out into shareable descriptor classes
similar to how the Register library works.
This also introduces SmartAdapter and SmartConnection which will
auto-create the correct Advertisements and Services without requiring
any direct use of UUIDs. Instead, classes are used to identify
relevant objects to "recognize".
This requires https://github.com/adafruit/circuitpython/pull/2236 and
relates to https://github.com/adafruit/circuitpython/issues/586.