[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

What's the goal of this API?  I think it's separating things out in a weird way:

* canOpenPath() will be true for some files we can't open -- e.g. binary files with unrecognized extension, or text files with non-UTF8 encoding, or files with weird permissions
* We want to show the same error message for some files where this returns true and some files where it returns false (that is, binary files with recognized and unrecognized extensions).  So it seems weird to separate their codepaths.

Same holds for canOpenFile() & EditorManager.canOpenFile().  (Also, aside: is it a bug that we're calling EditorManager.canOpen<b>File</b>() with a path and not a file?)

It looks like this is being used for a couple short-circuits that we don't really need (and which might prevent showing a proper error message when the user tries to open a binary file).  And I see one call in the DragDrop code, which I think we can eliminate now that images / custom views are allowed in the working set.