Add panel API

The implementation of #3680:

```coffee
atom.workspace.addViewProvider
  modelClass: ProjectBrowser
  viewClass: ProjectBrowserElement
```

and 

```coffee
panel = atom.workspace.addLeftPanel(item: new ProjectBrowser)
panel.hide() # Hide the panel
panel.show() # Show the panel
atom.workspace.addRightPanel(panel) # Move the panel to the right
panel.destroy() # Remove the panel entirely
```

TODO

* [x] Create `Panel` model
* [x] Create `PanelElement` custom element
* [x] Get basic panel addition working
* [x] Add panel container model / element
* [x] Add panel visibility control
* [x] Example package exercising for visual check
* [x] Implement priority system
* [x] addLeftPanel() 
* [x] addRightPanel()
* [x] addTopPanel()
* [x] addBottomPanel()
* [x] Tinker with a package using this api (status bar)
* [x] Docs
* [x] Deprecate the old stuff

Closes #3680
Is toBeHidden already taken by jQuery? It would be great to override that name somehow because `toHide` just reads wrong to me.