ViewModel presentation.

This PR adds ViewModel presentation to ReactiveApp. This allows us to define the navigation logic in applications by using ViewModels instead of Views. 

## Goal

At this moment our applications navigate on a View basis. This makes our ViewModels less portable and results in SharedViewModels with platform specific parts which sucks because of reasons. ViewModels should be 100% totally fully portable and access platform functionality using abstractions and interfaces.

* For every non portable ViewModel a kitten dies. Not negotiable.
* ViewModels should not assume that Views are cached in any way possible.
* The ViewModel is the new View. How things are shown on screen is an implementation detail. This also means there is a one-to-one mapping between Views and ViewModels.

## Are other parts affected by this change?

Maybe. I do not know at this moment.

## Other fixes?

No

## TODO:

- [x] Define interfaces.
- [x] Make it work.