Move hfsort linker script tool to oss

Summary: A few small mods to make sure hfsort emits a gold compatible function ordering file.
Interesting parts of the internal commit history are below.
Hat tip goes to bertrand, ottoni, twoh.

  Author: Taewook Oh <twoh@fb.com>
  Date:   Wed Sep 3 16:40:17 2014 -0700

    implementation of pettis-hansen algorithm

    Summary:
    ^ Title. Binary hfsort and pettis-hansen will be created in the
    separate subdirectory, and hf-process.sh script has fixed to reflect the new
    location of hfsort binary. This version generates callgraph from the linux perf
    result. Once checked-in, I'll add the version that uses Pintool to generate
    call-graphs. Even for Pettis-Hansen, clusters are sorted by density.

    Test Plan:
    The log file out of hfsort and pettis-hansen run showed that both
    algorithms worked as expected. Profile for test runs were collectd by running
    hf-prod-collect.sh

  Author: Guilherme Ottoni <ottoni@fb.com>
  Date:   Mon May 19 12:19:04 2014 -0700

    [linker_script] Disable frozen pages, and set page size to 2MB

    Summary:
    The "frozen" pages helped to keep really hot small functions in a few
    4KB pages, but since we moved to using huge pages, we can disable
    that.  This allows these functions to be clustered with some of their
    callers and/or callees.  This diff also sets kPageSize to 2MB to
    reflect the current use of huge pages, although this only affects
    tracing output with frozen pages disabled.

    I considered just killing the code related to frozen pages, but
    decided not to because we've talked about potentially using this for
    other projects or open source users that may not use huge pages.

  Author: Guilherme Ottoni <ottoni@fb.com>
  Date:   Fri Nov 8 15:48:18 2013 -0800

    Use dynamic call graph information to sort hot functions for the linker

    Summary:
    This diff leverages the call graph information from perf to produce a
    code layout with better locality, in addition to the density (samples
    over size) metric that was in use.

    There's a large space of heuristics that can be used.  The current
    version still uses purely the density metric to place the first few
    (4) pages.  The remaining functions go through a clustering pass that
    considers combining a function's cluster with the cluster for the
    function's most common caller.  The resulting clusters are then placed
    according to the same density metric.

    There are a few knobs in the beginning of hfsort.cpp that can be
    tuned.

Reviewed By: @ottoni

Differential Revision: D1644904