Improve performance of PhutilSymbolLoader::selectAndLoadSymbols()
Improve performance of PhutilSymbolLoader::selectAndLoadSymbols()

Summary:
This function currently works like this:

  foreach (library) {
    foreach (symbol) {
      does it match? -> load it
    }
  }

However, we end up here in __autoload() so this pathway is pretty performance
sensitive, and in the common case we have a symbol name. So instead we do:

  foreach (library) {
    if (we-know-the-symbol-name) {
      symbols-to-examine = just-that-symbol;
    } else {
      symbols-to-examine = all-symbols;
    }
    foreach (symbols_to_examine) {
      does it match? -> load it
    }
  }

This takes the function down from slightly-expensive to pretty-cheap and saves
5-10ms per page on my machine.

Test Plan: Site still works, including reflection interfaces like Conduit, and
it wouldn't if this was broken. Profiles show 5-10ms drop (~25%-50%) in this
function's exclusive time.

Reviewers: jungejason, nh, tuomaspelkonen, aran

Reviewed By: aran

CC: aran

Differential Revision: 922

codelabs-ch/libphutil,devurandom/libphutil,librewiki/libphutil,Symplicity/libphutil,yangshiqi/libphutil,julkiewicz/libphutil,schlaile/libphutil,newbeess/libphutil,codelabs-ch/libphutil,Symplicity/libphutil,fivestars/libphutil,memsql/libphutil,Automattic/libphutil,r4nt/libphutil,aik099/libphutil,PageUpPeopleOrg/libphutil-patches,schlaile/libphutil,eSpark/libphutil,schlaile/libphutil,uhd-urz/libphutil,julkiewicz/libphutil,uber/libphutil,uber/libphutil,librewiki/libphutil,julkiewicz/libphutil,librewiki/libphutil,christopher-johnson/libphutil,wxstars/libphutil,fivestars/libphutil,fivestars/libphutil,aik099/libphutil,wikimedia/phabricator-libphutil,Khan/libphutil,uhd-urz/libphutil,r4nt/libphutil,yangshiqi/libphutil,PageUpPeopleOrg/libphutil-patches,wxstars/libphutil,devurandom/libphutil,memsql/libphutil,codelabs-ch/libphutil,devurandom/libphutil,eSpark/libphutil,uhd-urz/libphutil,zhihu/libphutil,r4nt/libphutil,uber/libphutil,Symplicity/libphutil,christopher-johnson/libphutil,eSpark/libphutil,aik099/libphutil,memsql/libphutil,Automattic/libphutil,PageUpPeopleOrg/libphutil-patches,christopher-johnson/libphutil,wxstars/libphutil,newbeess/libphutil,wikimedia/phabricator-libphutil,wikimedia/phabricator-libphutil,zhihu/libphutil,Khan/libphutil,Khan/libphutil,yangshiqi/libphutil,newbeess/libphutil,zhihu/libphutil,Automattic/libphutil