Refactored to use route-recognizer

This should fix all the urlencoded/non-ascii issues.

The API is now significantly cleaned up and much more friendly.

Waiting on an upstream fix for "" as a path.