[MERGEABLE] Splitview With Image and Custom View Support

https://trello.com/c/A22yIIal/1282-splitview-add-view-provider-mechanics

This PR is can be merged into jeff/splitview-1x2 when ready
* Adds a MainViewFactory for view factories
* Adds support for images
* Adds support for extensible custom views
* Adds support for 1-off views
* Adds a view state cache singleton
* Fixes #6356

As i said in another comment, `@typedef` does not seem to be supported yet, but I think these will be more readable if type name isn't way out to the right. Something like the following, although I am not sure which order makes the most sense:

```
 /**
  * @typedef
  * Factory
  * {canOpenFile:function(path:string):boolean, openFile:function(path:string, pane:Pane)}
  */
```