Module Holder
Holder to enable us to lazy create native modules.
This works by taking a provider instead of an instance, when it is first required we'll create and initialize it. Initialization currently always happens on the UI thread but this is due to change for performance reasons.
Lifecycle events via a LifecycleEventListener will still always happen on the UI thread.