(core) WIP first stab at the device manager

Still needs refining, including how to manage DI of the directories.
(core) Further work to the device manager
(core) convenience method
(core) Handle timeout expections in children.

By resuming them.
(core) name the various actors
(core) update simple Main app

To reflect recent device manager changes
(core) Move provider into its own file
(core) Tidying up the device manager a little.

There's still an unsatisfactory amount of boiler-plate which will grow
as new device types are added.  I'm not sure of how to avoid this yet,
as type erasure on the JVM means we can't pattern match on Request[D]
in the actor's receive method.
Merge branch 'feature-device-manager'