do not create new route controllers if the route is the same...

See Issue #895.

Key use case: Be able to build an Asana like interface where you want
the url to change to the item that is selected but you don't want to
rerun all helpers (thereby re-rendering the entire task list every
single time you click on something).

Couple of changes here:

1. On dispatching a new url, if the route is new then create a new
controller as we've always done before.

2. If the route is the same as the previous route AND we already have a
controller, just reconfigure the controller with the new url and
dispatch context. Don't create a new controller instance. This means we
don't need to rerun all helpers, since the controller hasn't changed.

3. Add getParams and setParams methods to controller to reactively get
and set the parameters. This way, if a helper needs to respond to
parameters reactively it can use this.getParams(). this.params will
still work the way it did before.

4. Add this.location = Iron.Location so that folks can reactively get
the current location from Iron.Location which will be reactive.

5. Instead of having iron:middleware-stack set the parameters, we'll do
it once from the router.

TODO:
- Update iron:dynamic-template to create dependencies for helper lookup.
- Update Guide and changelog getParams
- I got rid of use(...) for now to simplify things. Need to plug onRun
  into the middleware stack. Will probably do the same thing with
  onAfterAction. Show examples of how to use Connect middleware with the
  existing hooks. Will revisit how to mount handlers at paths.