Extract starting functionality into an exported class

closes #3789
- Create a GhostServer class to manage state
- index.js now calls start on the exported server
- Alter tests to expect a GhostServer instance
Removing hard-coded port number

closes #1391
Merge pull request #3851 from ErisDS/issue-1391

Removing hard-coded port number
Merge pull request #3815 from JoshWillik/extract-init

Extract the starting functionality into an exported class.
Added correct contextual Meta Titles and Descriptions

closes #2462

- adds conditionals for pagination for index, tags and author pages
- outputs correct meta title and description according to context
- adds further unit testing
Replace the when promise library with bluebird.

Closes #968
Merge pull request #3826 from jaswilli/bluebird

Replace when with bluebird
Fix mobile settings menu transitions with new GUI

Ref #3810
Adjust setup and teardown of route tests.

Closes #3856
- No longer call clearData and initData in test setup because
  migration.init is run during Ghost startup.  The unhandled
  error was a result of clearData removing all the tables while
  Ghost was running--there was a timing issue with the oauth middleware
  checking the refreshtokens table when it had just been deleted.
Merge pull request #3862 from novaugust/settings-menu-gui-update

Fix mobile settings menu transitions with new GUI
Merge pull request #3863 from jaswilli/issue-3856

Adjust setup and teardown of route tests.
Merge pull request #3861 from cobbspur/metas

Added correct contextual Meta Titles and Descriptions
Add permalink customization.

* Change the permalink input element to type text.
* URLs can be any combination of `^(\/([a-z-0-9_-]+|:id|:slug|:year|:month|:day))+\/` to allow for URLs like `/way_to-customize/:id/:slug/another-customization/`
* Checking is not very strict, could be made more so.
* Permalink toggling test code is updated to handle new format.

fixes #1631