[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

@redmunds the syntax for `typedef` is `@typedef [<type>] <namepath>` 

This is exactly why I wanted to use the more robust method of declaring complex types using `@callback` and `@property` to make it more human readable.

Doesn't JSDoc and the API generator requires JSDoc tags to be on one line anyway?