Lift class map construction into a new class map query
Summary:
Ref T8637. The "load concrete subclasses" pattern has enjoyed wide success, but we're starting to collect a lot of instances of "loop over this list of things and make sure they all really have unique keys".
We can better support this, caching, subclass expansion, and sorting in a thin layer on top of PhutilSymbolLoader.
Test Plan: See next diff.
Reviewers: btrahan, joshuaspence
Reviewed By: btrahan, joshuaspence
Subscribers: epriestley
Maniphest Tasks: T8637
Differential Revision: https://secure.phabricator.com/D13391