Router improvements


* Moved url hash listner into hash.js

* Added support for route Default values

* Added support for Parameter constraints
 * Function constraint
 * RegExp constraint
 * Array options constrait

* Added support for expanding routes to URL:s

* Route now pre-calculate possible optional permutations of route segments for speed

* BUG: Rewrote optional segment match to allow a
  Route '?foo/world/?bar/hello' to match a
  URL '/foo/world/hello'

* Replaced event routing with a routeTable

* Moved 'matched' event to route

* Changed routeMatchResult to include key/values for matched
  route parameters, reference to matched route and URL

* Moved complicated instantiation code to factories
  (routeFactory and segmentFactory)

* Moved segments to a separate file since file was too long

* Improved naming and documentation