Redo D5527

Summary:
If the PhutilURI parser tries parsing an invalid uri (or incorrectly parses
a uri), the whole input ends up in the path. The way that D5527 handled ensuring
that paths are absolute resulted in incorrect output from the `__toString()`
method.

PhutilURI still doesn't parse uris correctly (like `javascript:alert()`) - I
might go back later to make this RFC 3986 compliant, but a few things depend
on the broken behavior and need to be fixed.

Test Plan: arc unit --everything

Reviewers: epriestley, wez

Reviewed By: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D5566