fix($urlMatcherFactory): no longer generate unroutable urls

Previously, urlMatcherFactory would squash default param values and any double slashes from generated urls (by default).  This behaviour caused urls generated with default values in them to not route back to the state that generated them.  Change the default behaviour to squash only the param-value and not the URLs.

Closes #1487

feat($urlMatcherFactory): configurable url param squashing

Allow configuration of the squashing behavior of default-url-parameters on a per-param basis with reasonable default setting.
fix($urlMatcherFactory): typed params in search

- Improved code structure for default parameter Type
- Added and Search-Query type supporting arrays of typed params in the query-string
- Consolidated path/query param codepath in UrlMatcher.format
- Allow squashing default query params.
- Cleaned up built-in param Types
- Add toString to Type and Param
- Add `name` to Type when registered
- Fix typo in ParamSet.$$equals Closes #1488

fixes #1488

chore(lint): linted
fix($urlMatcherFactory): allow arrays in both path and query params

- Connected Type.$$array with options.$$array.
- Add $$array: true where values are always mapped to arrays (even if only one value found)
- If a query param ends with [], it is considered $$array=true, else $$array='auto'
- Encode array path-parameters using dashes

closes #1073
closes #1045
closes #1486
closes #1394

chore(lint): linted
fix($state): reload() now reinvokes controllers

- change reload() to use notify: true

fixes #582