Query parameter support for Controller routes.

This change enables routes to consume query (aka search string)
parameters in routes. Query parameters are always optional, and
a hash of the parameters is always passed as the last argument to
route handlers (even when there are no query parameters in location
bar).

Allowed query parameters can be defined in the `defineRoutes`
method of a `Controller`. Example:

```javascript
// ...
defineRoutes: function () {
  // All routes will consume a `foo` parameter
  this.query('foo');
  this.show('bar', 'showBar', function () {
    // Only routes that match in the `bar` namespace consume a `baz` parameter
    this.query('baz');
  });
},
// ...
```

In the example above, if the following location is visited on the page:

`/bar/1?foo=1&baz=2&unrecognized=3`

The `showBar` route will be called with the following `arguments`:

```javascript
[1, { foo: 1, baz: 2 }]
```
I'd like to see smaller methods; fewer temps and more queries. E.g.

```javascript
initialize: function(){
  // ...
  _.bindAll(this, '_routeForAction', '_routeMatcherForAction');
  this.defineRoutes.call(this.rootAction.getMediator());
},

getRoutes: function(){
  this.routes = this.routes || _.map(this._getValidActions(), this._routeForAction).reverse();
  return this.routes;
},

_routeForAction(action){
  return {
    fragment: action.getRoute(),
    handler: action.createRouteHandlerForController(this)
  };
},

_getRouteMatchers: function(){
  this._routeMatchers = this._routeMatchers || _.map(this._getValidActions(), this._routeMatcherForAction);
  return this._routeMatchers;
},

_routeMatcherForAction: function(action){
  return this.app._routeToRegExp(action.getRoute());
}

_getValidActions: function(){
  this._validActions = this._validActions ||
    _.select(this.actions, function(action) { return action.hasHandler() });
  return this._validActions;
}
```