Make the fixup map unit test use gunit

Even before libhphp_runtime is split up it seems like we
should at least have some kind of way to write some unit tests, when
appropriate.
Check probe limit in HphpArray

Honor the MaxArrayChain runtime option by raising an error when
HphpArray probes get too long.  Since HphpArray uses open hashing
with quadratic probing, we use double the configured threshold,
which is arbitrary, but based on testing, to reduce false positives.
Cleaned up some load operations and added a label to LdClsCns.

Added a label to LdClsCns so that we generate better code for
it if guardStackType refines its type.

Cleaned up some of the load instructions: Removed the NR suffix from
LdMemNR, LdPropNR, and LdRefNR. Removed unused offset parameter from
LdMem. Improved docmentation of load instructions and described
rationale for having labels on some of them.

Renamed CheckUninit to CheckInit to make it consistent with CheckType
(i.e., branch to label if type is not init).
Fall back to interp from the IR.

Introduce a runtime option to allow falling back to the
interpreter, rather than to tx64. Once this is faster, we know we're
ready to ditch tx64.

Cleanups along the way:

  - Start macro-izing the runtime options. For tractability, I only did
    the Eval* runtime options, but the same pattern should work for other
    parts of the hdf namespace.

  - const SrcKey& -> SrcKey in a lot of places.

  - slightly iron out the handshaking between translate and
    translateTracelet.
Rename jumps.cpp to jumpopts.cpp
Fix buffer overrun, and add a check

We wrote 49 chars to a 48 char buffer. Under gcc-4.7.1,
RELEASE build, this corrupted a variable in the caller, resulting
in a crash.
AllowedDirectories overwrites should append

VirtualHost.*.overwrites.AllowedDirectories would replace the
default AllowedDirectories list, rather than of adding to it,
while Tiers.*.overwrites.AllowedDirectories would append to the
default AllowedDirectories list. This caused confusion, and
errors.

This makes both cases append, and also sorts and uniquifies the
list to make checking it O(log N) rather than O(N).
Couple of small fixes
Fix a bug for HHIR Print of Type::Bool, add some random byte things

Replace ands with movzbl.  Calling C++ for print_boolean was
wrong because it took an int64 but we don't know that the bool was
zero-extended yet.  Added two boolean instructions to the assembler
(with unit tests) that I didn't ever use.
Fix an assert on syntax errors

When using hphp to compile a repo, a syntax error in an input
file would cause an assertion to fail (DEBUG only).

When I tried to add a testcase, I found that we didnt quite support
this. We have a mode that ignores errors; but that also ignored crashes,
so I fixed test.mk to differentiate.

That revealed that hphp didnt pass through the result of invoking
hhvm, and that hhvm returned -1 for normal exits where the
php code had fataled.

When running the tests I found that it took over an hour to run
TestCodeRunRepoJit-Compilation, vs 4 minutes for the whole of
TestCodeRunRepoJit a couple of weeks ago (and my machines was
unusable for most of that hour). I dropped the parallelism
to "number of cores" from "number of cores * 2" and the time
dropped to a couple of seconds.
Add a runtime switch to disable dead code elimination

This fixes a few problems when DCE is disabled, however some
tests still fail.  Fixed:
 * register allocator assigns registers to unused destination tmps
 * fixed LiveOutRegs calculation with unused results
 * removed assert from cgJmp_
 * support immediate constants in cgMov
Move hphp/doc -> hphp/src/doc

Needed for FB internal restructure.
Minor tweak so genDefConst works with all ints

Right now it gets confused if you don't give an explicit
argument list on many ints, if they are 32 bit or unsigned or int64_t
vs int64, etc.
Move jump simplifications to the Simplifier

It looks like these were implemented before simplifyCmp, so
it duplicated some of the abiltiy to simplify comparisons with certain
types of constant arguments.  This code can be simpler and in the
simplifier.
Some assertions for invalid registers

Sometimes we have PhysRegs that are InvalidReg and try to use
them anyway.  Right now, there's some cases where this ends up passing
reg::noreg to an emitC* function that treats that as a special
meaning, and you can emit machine code that didn't have the type of
memory operand you wanted.  Assert here because PhysReg stuff is
constexpr (cannot assert there).  Ideally it wouldn't implicitly
convert to Reg64 and this would all be impossible, but oh well.
Add support for embedding the repo

Modify hphpc so that if format contains "exe" it uses objcopy
to put the generated repo into the hhvm binary, in a section
named "repo".

Write an sqlite vfs wrapper that allows us to open a range
of bytes in a file as a read-only sqlite database (using the
filename to encode the range: file:<start>:<length>).

Use libelf at startup to see if there is a repo section, and
if so enable the vfs wrapper, and add appropriate
repo-authoritative options to the command line to use the
repo section as the repo.
Add pseudo-counters for tx64 vs. hhir instructions

The new runtime option (Eval.EnableInstructionCounts)
combined with the new pseudo-counters instr_hhir and instr_tx64 will
let us track how many executed hhbc instructions were translated by
tx64 vs. hhir.
Getting started on HHIR FP support: OpEq.

While comparisons aren't very dynamically frequent, they're an
easy place to get started on implementing FP support. Like tx64, I haven't
bothered to teach the register allocator anything about the xmm regs; I
just move operands from gprs to xmm0 and xmm1, and evaluate the expression.

I was worried about interfering with spilling to these same registers, but
we spill to mmx registers, which alias the legacy floating point stack.
The XMM regs are physically distinct.
Combine hphp and hhvm into one executable

Move hphp/main.cpp to compiler/compiler.cpp, and rename
a few things to make it possible to link with hhvm.

Modify hhvm startup to run as hphp if
the first argument is --hphp.
Missed a few fixes from Jordan.