Migration improvements

refs #2600

- fixed issue with defaults not being populated on upgrade
- added logging to all actions in the migration process to help debugging
  in future
- did a little bit of refactoring
Refactor settings routing and mobile interactions

Closes #3254, closes #3138, closes #3245
 ### Settings Routing and View refactoring
- Refactored `SettingsView` to handle transitions between mobile and desktop layouts
- `SettingsRoute` will only transition to `settings.general` if the screen is large enough to show both the menu and the content
- Added `SettingsIndexView` to handle showing the settings menu on mobile screens
- Added `SettingsContentBaseView` to be inherited by any settings view that is not index.
- Updated Settings templates appropriately to work with new views
- Removed extraneous `active` class from `settings-content`
- Changed settings menu to use `gh-activating-list-item`
- Retooled settings tests

 ### Mobile Utils
- Renamed file to `mobile.js`, since it's inside of `utils/`
- Added `mobileQuery` MediaQueryList to help detect layout changes
- Removed unused `hasTouchScreen`, `device.js` should be used instead.
- Removed unused `smallScreen` function
- Moved FastClickInit to codemirror-mobile
Move image upload to API

closes #3252
- added `/ghost/api/v0.1/uploads/` endpoint
- removed upload method from `controller/admin.js`
- moved removal of temporary files from storage to endpoint (needed to
account for failed uploads)
- changed and moved tests
- Oversight: I think that we use `.otherwise()` and `.catch()` a bit
too extensive and mask the real error objects. We probably need an
error handling strategy at some point in the future.
Remove minor notifications; Close persistent notifications even on error

Closes #3105, Closes #3175

- Removed notification on successful post's `page` status change
- Removed notification on successful post `featured` status change
- Added `closePassive()` notifications on error in the post-settings-menu
- Persistent notifications will close whether their `DELETE` request was
  successful or not.

 #### Misc
- Added `name` attribute to `post-setting-menu.hbs` inputs to facilitate testing
- Removed `return <Promise>` from action in `PostSettingsMenuController`. Actions should only return `true`
- Toggling `post.featured` won't fire NProgress.
Move inline templates to standalone template file

Refs #3161
- Move two inline template snippets from the post tags input
  component into the .hbs template file so they can be
  pre-compiled.  Needed when shipping only the handlebars runtime
  in production mode.
Merge pull request #3210 from novaugust/remove-minor-notifications

Remove minor notifications; Close persistent notifications even on error
Merge pull request #3259 from novaugust/settings-mobile-routing

Refactor Settings routing and mobile interactions
Merge pull request #3278 from jaswilli/prod-prep

Move inline templates to standalone template file
Merge pull request #3270 from ErisDS/migrations

Migration improvements
Replace anchors with no real href with buttons

Closes #3101 & #916
Merge pull request #3276 from sebgie/issue#3252

Move image upload to API
Merge pull request #3277 from PaulAdamDavis/link-href-fixes

Replace anchors with no real href with buttons
Restored spam prevention

closes #3128
- added spam prevention middleware
- restored tests
Prevent loading setup screen if already setup

Closes #3145
- Prevent navigation to the setup screen if Ghost setup
  has previously been completed.
- Fix templates that were incorrectly using foreach instead of each.
- Add validation for minimum password length.
- Fix up functional tests and split out tests for setup to a separate
  instance of casper because setup requires a new database.
- Add a cleanDatabase task to grunt which resets the database to
  new.
Handle undefined datetime values

Closes #3288
- Check for undefined last_login and created_at values that occur
  on a User model for an invited user.
Hacky FORCE_MIGRATION env var

refs #2600

One day in the future it would be nice to have a CLI for Ghost
In the meantime, lets have an easy way to force migrations to run
This is for development, or dead end situations only
It will at least do a DB backup ;)
Merge pull request #3280 from jaswilli/issue-3145

Prevent loading setup screen if already setup
Merge pull request #3282 from sebgie/issue#3128

Restore spam prevention
Merge pull request #3298 from jaswilli/issue-3288

Handle undefined datetime values
Merge pull request #3296 from ErisDS/force-migrate

Hacky FORCE_MIGRATION env var