Rebuild library map

Summary: Rebuild library map after D9787.

Test Plan: I forgot to run `arc liberate` as a part of D9787.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9814
Move `PhutilLibraryMapBuilder` to `libphutil`

Summary: Move `scripts/phutil_rebuild_map.php` and the `PhutilLibraryMapBuilder` class from rARC to rPHU. The intention here is to create a stronger `ArcanistInfrastructureTestCase` acceptance test (and the corresponding acceptance tests for rP and rPHU) by regenerating the library map file (to a temporary output) and comparing it to the existing library map file. This will be able to catch the case in which a new class/function has been added to a library, but `arc liberate` has not been executed.

Test Plan:
```
> ./scripts/phutil_rebuild_map.php src
Finding source files...
Found 344 files.
Loading symbol cache...
Found 344 files in cache.
Building library map...
Writing map...
Done.
```

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9813
Move `PhutilBootloader` into the standard directory structure

Summary: Move `PhutilBootloader` and other related classes/functions into the standard directory structure. Whilst there is no compelling reason that we have to do this, it does make the code in `libphutil/src/__phutil_library_init__.php` a bit cleaner.

Test Plan: Verfied that `arc liberate` and `arc unit` still worked.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9818
Add an `appendPath` method to `PhutilURI`

Summary: This method would primarily be useful when you have a `PhutilURI` (which may or may not have a path) and you would like to define a path relative to the existing URI.

Test Plan: Wrote and executed unit tests.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9823
Add an `externals/includes` directory

Summary: Add an `externals/includes` directory that will be included as a part of PHP's `include_path`. Arcanist already has similar functionality. Without this, it is hard to invoke the `scripts/update_compat_info.php` script, which was moved from rARC to rPHU in D9813.

Test Plan: N/A

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9821
Move `PhutilLibraryMapBuilder` into the standard directory structure

Summary: See D9818.

Test Plan: Made sure `arc liberate` still works.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9822
Improve the `PhutilInfrastructureTestCase` unit tests

Summary:
Improve the `PhutilInfrastructureTestCase` unit tests such that they will fail if any of the following conditions are satisfied:

- A symbol referenced in the `__phutil_library_map__.php` file no longer exists.
- A symbol exists in the library but is not referenced within the `__phutil_library_map__.php` file.
- A symbol extends from a different parent symbol than that declared in the `__phutil_library_map.php` file.

Test Plan: Added a new function. Ran `arc unit` and observed the test failure.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9824
Add a `phutil_get_current_library_name` function

Summary: See https://secure.phabricator.com/D9827?id=23585#inline-37952

Test Plan: Called the function from within `arcanist` and verified that `'arcanist'` was returned.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9828
Disregard `src/extensions/` when running library map unit tests

Summary:
The runtime map will include anything loaded via `src/extensions/`, which means the test will always fail if you have anything in that directory.

Instead, allow the base (no extensions) map to be retrieved, and use that for comparisions.

Test Plan:
  - Ran unit tests with stuff in extensions.
  - Verified stuff in extensions still works fine.

Reviewers: joshuaspence

Reviewed By: joshuaspence

Subscribers: epriestley

Differential Revision: https://secure.phabricator.com/D9834
Minor change to `PhutilInfrastructureTestCase::testLibraryMap`

Summary: Modify `PhutilInfrastructureTestCase::testLibraryMap` to use `phutil_get_current_library_name()` instead of hard-coding the library name.

Test Plan: Ran `arc unit`, tests passed. Added a new function without running `arc liberate`, tests failed.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9844
Minor modification to `PhutilJSONParser` documentation

Summary: The `PhutilJSONParser` class is reasonably stable, we no longer need to advise against using it.

Test Plan: N/A

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

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