To build an MVP Fragment swapping framework that minimizes boilerplate code and minimizes all code in general
Kotlin
RxKotlin
Retrofit2
Dagger
Presenters implement Observer<MVPObservable> and are to be used to subscribe to all UI events (via RxKotlin) as well as all Retrofit2 observables
State save / restore is managed in the presenter via FragmentLifecycleCallbacks and Kotlin's @Parcelize
This means the RootFragmentState can't be a data class.
As a consequence, the RootPresenter can't access the RootFragmentState as a data class and make use of the ```copy()``` function.
All new states must be generated by the subclass, even though the RootPresenter is set up to handle 'root' events like errors and loading states.
Ideally, the RootPresenter should be able to generate these new states as well, removing the necessity of handling these root events in the children fragments.
The call to inject must be made from the subclassed presenter, it can't be handled by the RootPresenter.