Allow libphutil libraries to load arbitrary runtime code from extensions/

Summary:
Currently, users need to build a libphutil library in order to add runtime code to Phabricator. While desirable for larger applications, this is fairly complex and offputting, and users have a relatively low success rate with it.

Instead, make libphutil recognize an `extensions/` directory and load arbitrary code from it at runtime, so that installs can drop code into this directory without needing to build a library.

(The tricky part here is that we update the class map so that `PhutilSymbolLoader` can select these classes correctly.)

Ref T2971.

Test Plan: Unit tests.

Reviewers: vrana, btrahan

Reviewed By: btrahan

CC: aran, AnhNhan

Maniphest Tasks: T2971

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