Initial stab at IE compat, and comments for rendering improvements.

- Note tests are probably broken as I'm working quickly.
- APIs could change as I'm in the process of sketching.
- Ideas are welcome.
WIP - Rendering comments.
WIP - New rendering component for the router.

cc @tmeasday, @piffie, @warsamebashir, @richiebe, @CMToups, @ryw, @eichie,
@payner35, @gabrielhpugliese.

- Doesn't work yet but I wanted to push and get feedback
- The idea is that the Router has a _renderer instance
- This _renderer is responsible for tracking a layout, a data context and one or
  more templates to be rendered into named yields. Each can vary independently.

Benefits:
 - @piffie's idea to allow recursive yields into child templates
 - controller level layouts
 - data context can be preserved across routes
 - templates and layouts can change independently

Example using the raw RouterRenderer:

```javascript
var renderer = new RouterRenderer;
document.body.appendChild(renderer.render());
renderer.setLayout('layout');
renderer.setTemplate('mainTemplate'); // render to __main__ region
renderer.setTemplate('asideTemplate', 'aside'); // {{yield 'aside'}}
renderer.setTemplate('footerTemplate', 'footer'); // {{yield 'footer'}}
renderer.setData({title: 'Some data context'});
```
WIP - It would help if I actually added the renderer file.
Use the new LayoutController to manage layout and template rendering.
WIP - Major cleanup.
WIP - Path handling enhancements, bug fixes, architecture cleanup.

- Part of a weekend process to clean up url handling, including ability to
  handle hashes and query strings properly; and to clean up APIs.
WIP - pathFor and urlFor explicit support for hashes and query params.

- Putting query on the params object was just too confusing.
- Often times the params object is a document itself so to get that to work with
  the Router you have to extend the doc (e.g. Post) with the query params or
  hash. It should be separate.
- Idea is to let user set data context using the {{#with ...}} helper and the
  query params and hash can be set using Handlebars options.hash.
WIP - Make named yield check async.

- Per Tom's comment, we don't need to make sure that the named yield exists at
  the time of calling setTemplate. But if it doesn't exist after the flush, it
  probably means the user forgot to declare the yield so we'll give them a
  helpful warning message. It's just a warning message and not an error. We
  could set varying degrees of warning messages at some point.
WIP - Fix named yield setTemplate check.

- Previously, I scheduled the yield check in an afterFlush callback.
- But if we were already in a flush, that would cause the function to be run as
  soon as all the currently flushing computations were recomputed.
- This would cause the afterFlush callback to be called before the next tick,
  and before the layout and template computations were recomputed, which is not
  what we want.
- There might be a more elegant approach, but this works.
WIP - Don't append query string if query string is empty.
WIP - before/after hook cleanup.

- Redo before/after hooks.
- Run order:
  - instance options
  - inherited hooks from top to bottom of inheritance chain