Represents a route
@example
var route = Route('/:foo/:bar');
@example
var route = Route('/:foo/:bar');
@param {string} spec -  the string specification of the route.
use :param for single portion captures, *param for splat style captures,
and () for optional route branches
@constructor
function Route(spec) {
  var route;
  if (this) {
    // constructor called with new
    route = this;
  } else {
    // constructor called as a function
    route = Object.create(Route.prototype);
  }
  if (typeof spec === 'undefined') {
    throw new Error('A route spec is required');
  }
  route.spec = spec;
  route.ast = Parser.parse(spec);
  return route;
}