Share a single wake lock among all holders
This branch refactors the use of Android wake locks so all holders share a single OS wake lock. Each holder accesses the shared wake lock through an idempotent acquire/release interface. This will be useful later when we have lots of short-lived locks with overlapping lifetimes.
The branch also refactors the creation of Bluetooth connections, adding a factory so we don't have to pass all the dependencies for connections via the plugin and plugin factory constructors.
Second part of #1142 (closed)