Encode username and password correctly in PhutilURI

Summary: Fixes T4374. We do not encode passwords in URIs correctly, so passwords with, e.g., the `@` character do not work correctly.

Test Plan: Added unit tests.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T4374

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