Follow symlinks when resolving theme paths.

Closes #4225
- If a theme is symlinked in the themes directory, follow
  the symlink so that the theme object is populated correctly.
- Only do the fallback loading of theme data in the validations
  module if it doesn't exist in config.
Refactor settings and content wrappers to allow smooth overflows and properly show headers on mobile

Closes #4186, Closes #4190, Closes #4150

- Alters markup to allow for correct use of `-webkit-overflow-scrolling: touch;`
- Updates the debug page to use the same markup as the rest of the settings page
- Solve floating tag bar issue by making it absolute, not fixed
Reset password signs the user in

Closes #4196
- Clear confidential info on leaving reset route
- Remove nested password access, because gross
- Also cleaned up some .then(f, h) to .then(f).catch(h) in setup controller
Merge pull request #4230 from novaugust/reset-signs-in

Reset password signs the user in
Merge pull request #4187 from PaulAdamDavis/settings-fixes

Refactor settings & content wrappers
Merge pull request #4226 from jaswilli/issue-4225

Follow symlinks when resolving theme paths.
refactor 'config' object to allow it to be initialized from a hash, including extracting content validations from file-reader
separate config info validations based on stand-alone versus middleware server
introduce new middleware module; drive out its initialization of the config object
w'ing-ip on refactor of Ghost boot to work for an embeddable express instance
supress doesn't-autostart-as-NPM-module warning when no server config ('grunt validate' broken due to earlier changes)
Clean up hanging promises left by middleware_spec
tidy comments and white-space on changes made to date
set paths.subdir from the blogApp.mountpath when configured as Express middleware
also set config.(_config.)url in the setSubdirPath middleware
implement 'generate404s' and 'generate500s' configuration flags
also set config.theme.url from blogApp.mountpath when used as middleware
when used as middleware, put an actual URL, not just an absolute path, into the config...url fields
use explicit 'asMiddleware' entry in config to identify when Ghost is configured as middleware in a larger app
change middleware API, replace .getGhostPromise() with .ghostPromise