Fixes #150 - Fix before/after hooks to work properly with inheritance.

- Change before/after hooks to be instance properties vs. class properties
- runHooks collects hooks all the way up the prototype chain so they are run
  from top to bottom
- TODO: Need tests for this
Fixes #161. Process option hooks as well as proto hooks.

- TODO: Update tests

Notes:
Hooks are now processed in this order:
Router global options ->
  Route options ->
    Superclass prototype ->
      Subclass prototype ->
        Instance
Add unload hook which gets called before a controller is unloaded.
Fix Handlebars helper pathFor and urlFor params bug.

You can optionally pass a parameters object as the first parameter. By default
these helpers will use the current data context for the parameters object.
Fix bug: ClientRouter was not calling super run method

- Moved assignment of current controller to base class
- ClientRouter now calls super run method inside an autorun callback
- unload now works properly as a result
- TODO: tests
Fix: external links not working due to regression in isSameOrigin
Fix PageManager renderLayout method to not use Spark.render.

- Fixes #148.
Force initial onpopstate event to be ignored by IronLocation.

- Sometimes the browser fires an initial popstate event and at this point the
  Router has already gotten the IronLocation.path().
- So the route runs twice on initial page load.
- Previously I was using a hacky solution that sometimes didn't work so I
  decided to be more clear about it. Only respond to onpopstate events if there
  has been at least one pushState or replaceState call.
Remove erroneous debug statement; oops.
Do not escape slashes in wildcard parameters.

This applies to both named and unnamed parameters.
This fixes #198
Fixes #201. Make sure parameter value is a string before splitting it.
Added documentation for the unload hook

As requested in #220
Minor cleanup on unload readme
Implement setData, notFound and loading code as before hooks.

- This allows upstream hooks to essentially override the default behavior.
- The before hook run order is:
   1. User defined hooks
   2. autoRenderLoadingTemplateHook
   3. setDataHook
   4. autoRenderNotFoundTemplateHook
Allow setting undefined or null data in PageManager.setData.

- This is how our autoRenderNotFoundTemplateHook works. It checks whether the
  data from this.getData() is undefined or null.
Sketching a better subscription and waitOn API...

Design thoughts welcome
cc @tmeasday, @Multiply, @Lepozepo
Issue #208

How it Works:
- You can call the `subscribe` method on a RouteController instance, which means
  you can call this.subscribe from a before hook.

- The return value of this.subscribe adds a wait() method that simply adds the
  subscription handle to a list of handles the user intends to wait on.

- Before hooks can now call this.wait(onReady, onWait). Notice we didn't pass a
  list as the first parameter. The default list is the RouteController's wait
  list. Multiple before hooks can call this method.

- You can still call this.wait with a list if you want to pass custom handles (a
  handle is just an object that has a ready() function).

- waitOn still works but all waitOn functions are called at RouteController
  constructor time and added to the waitList to be used when the controller is
  run. This helps ensure the subscriptions aren't called multiple times.
Add a link Handlebars block helper and a load hook.

- Link Helper Usage:
  {{link route="post" params=optionalObject query="q=search" hash="anchor"}}
    Some Link Text
  {{/link}}

- Add a non reactive load hook for RouteControllers. The load hook is run by the
  router after the RouteController has been constructed but before it is run.
  This means before the "before" hooks, "action" function and "after" hooks are
  run. The load hooks are run in a nonreactive callback unlike before, after and
  action functions.
Remove erroneous computation. The before hook is already in a computation.
setLayout should set value to default layout if value is falsy.

- Fixes Issue #192.
Readme todos