customViewer API: Registry to enable extension developers to add CustomViewers

This change adds a public API to EditorManager that enables extension developers to add custom viewers to Brackets following the same pattern as implemented by ImageViewer: When a file is opened EditorManager is consulted for available CustomViewers for the given file type. If available the custom viewer is used by EditorManager to display the file. 

A custom viewer would have to implement the following:
- `render(fullPath, $editorHolder)`
 - `@param {!string} fullPath Path to the image file`
 - `@param {!jQueryObject} $editorHolder The DOM element to append the view to.`
- `onRemove()`
      signs off listeners and performs any required clean up when editor manager closes
      the custom viewer

To register with EditorManager `registerCustomViewerProvider(langId, provider)` needs to be called where 
     `@param {!String} languageId, i.e. image, audio, ... to identify a language known to LanguageManager `
     `@param {!Object} provider Custom view provider instance`