Improved uri parsing

@ngallagher87 and @bruce-alderson 

This makes the presto request `referer` and `uri` members into objects with fully parsed representations of their source URLs.

Let me know if the approach is alright. I'll have to fix anywhere in the code that references these, but I don't think it's many spots.
@bruce-alderson: Question

When this exception is thrown it is not caught by presto's global error handler. Is that a bug? Or should I handle invalid URLs differently (error log with no exception)?