Issue title: [Epic] Frontend Refactor (Channels)
 Issue body: This is a WIP epic - I'm still working out the steps needed to get from A-B and I'll break it down into sub tasks/sub issues as and when, in the meantime, the goal is clear and documented here.

---

The frontend of Ghost - that is the server side code which renders a blog using the active theme - has been somewhat unloved for a little while now. It essentially consists of some hard coded routes in `/routes/frontend.js`, which in turn call the monolithic functions in `/controllers/frontend.js`. It's time for this part of Ghost to be refactored into something more elegant, and importantly, something more extensible.

On the [wiki](https://github.com/TryGhost/Ghost/wiki/Channels-101) you'll find a new document, titled [Channels 101](https://github.com/TryGhost/Ghost/wiki/Channels-101), which introduces and explains the concept of Channels for the frontend. In short channels are the abstracted concept of a list of posts, i.e. the homepage, the tag archive, the author archive or any other group of posts you could conceive of.

And the very end of the document it talks about working to slowly remove hardcoded bits of the fontend and refactor it into configuration & generation code, before finally moving towards making channels a model & API endpoint just like Posts, Tags and Users.

This issue is the 'epic' where we'll keep track of our progress towards achieving this New World Order.
- [x] Refactor out the hardcoded slug keywords #4519
- [x] Convert sitemaps & rpc pings to use events #5069 
- [x] Move RSS from frontend controller & refactor to use events
- [x] Move post-processing of author data out of the frontend controller #5159  
- [x] Refactor frontend controller #5192

Need to solve:
- [x] Dynamic routing for channels
- [x] Pagination when in channel
- [ ] meta data for channels
- [ ] sitemap for channels
- [ ] Improve the channels API

Maybe later:
- [ ] ~~add a channel registration mechanism that works whilst Ghost is running~~
- [ ] ~~Support offset, rather than page, in the API #2896~~
- [ ] RSS feeds for each channel linked in that channel
- [ ] Post urls & next/prev post when in channel

-----

## Updates: Aug 2017

The current state of channels is that it the functionality is largely refactored and in place, but can only be accessed by modifying the core file `channels-config.js`. This is because, although the basics are working, advanced behaviour of Ghost isn't yet properly linked to channels.

Examples of missing pieces (some listed above) are:
- Sitemaps
- Meta data
- RSS feed (URLs only)
- Next/prev post when in a channel
- Deep customisation, e.g. disabling RSS feeds

There is also some pure-refactoring that needs to be done:
E.g. 
- moving channels to a proper home
- moving non-channel pieces from controllers/frontend.js to a proper home
- strengthening the implementation to make channels more of a first class object
- better/clearer default configuration
- proper use of express
- exposing channels without core modification

Basically, we need to iron out a few more of the major pieces, and then expose this config. Short term, we're going to start publishing blog posts on how to use the functionality that is there by hacking core.




 Comments: 
 Comment 0: ^ As you can see from the long list of linked commits. I continue to make slow but steady progress on moving this towards reality. 

I have many of the pieces for channels in place, and a PR almost ready to land for dynamic routing

The splitting out of structured data is a project that could be worked on separately, so I've raised an issue for it #6186

I also need to start playing with how to move the whole of the frontend (inc single posts) to be config driven and auto-generated in the same way, such that effectively, a 'context' is a thing from which we can determine what to do in all sorts of circumstances like meta title, body  classes, view, etc. So far I've kept the concept of 'single' and 'channel' separate, and it's working OK, not sure if that's going to last.

 Comment 1: As I can't comment on the wiki page (https://github.com/TryGhost/Ghost/wiki/Channels-101), I'll make my comment here.

I feel Channels are a real benefit for most people who don't need a 'blog' (per say). For those folks, regular content generation is not part of their strategy. Basically, viewing posts by default makes them uncomfortable as they don't post regularly. I think most people still want a nice website where they can manage their stuff from time to time over a blog. 

Now.

I'd would love to be able to define my default page via the Channel I choose. Something like mysite.com/welcome or mysite.com/hey

This way, I can control better the user experience and point to the regular blog (The most obvious example of a channel in Ghost is the home page) view when needed. 

I feel the channel functionality could be under the navigation tab. From there we could choose:

- blog view, newest first
- blog view, oldest first
- custom page: (URL FIELD)

Would it be possible that when a user enters mysite.com in it's browser, the ghost engine open the page mysite.com/hey with the custom channel ? Now, this might brings the issue regarding the URL of the default blog view.

How do you see this @ErisDS ?
 
 Comment 2: I need this feature for production, so I hacked the core to expose the channels API to the config file. Probably not the best way to implement it, but here it is: phaseOne/Ghost@eb2543e370db47bf0791341f2c09817dc207d496

One would add something like this to their `config.js` file:

```
channels: {
  blog: {
    name: 'blog',
    route: '/blog/'
  }
}
```

 Comment 3: I've updated the original issue with a bit of a status review. It's not very in depth just now, as I'm just warming up to working on this again.

Short term, I have a couple of key goals for spikes & small changes:

- [x] configurable rss/pagination: https://github.com/TryGhost/Ghost/pull/8857
- [ ] blog post about how to use this to make a static homepage
- [ ] prev/next inside of channels
- [ ] theme helper improvements to go with this
- [x] using res.locals to store channel config (likely needed for prev/next and meta data)
- [ ] context load sitemap problem, to see if I can at least spec a solution
 Comment 4: How far off completion is this? I'd love to contribute but I'm no Node developer lol
 Comment 5: Closing in favour of #9601 
{'source': 'GithubIssues', 'repo_name_with_owner': 'TryGhost/Ghost', 'issue_id': 65491545, 'repo_stars': 41638.0}