Replaced the ViewModel constraint by the IViewModel interface as much as possible.

Also started with the shell library project for shell specific logic that the client will have to use.