More updates for device API
Implemented semantic factory reset (still needs testing). Fixed some bugs.
Made AsyncConstruction state mutable and observable so you can use it to
broadcast lifecycle changes and perform reinitialization. Improved logging.
Etc.
Also made Observable async capable and allow for return values from observers,
neither of which I ended up using yet but will be useful in the future.