Streamline HphpArray fast paths

Streamline fast-paths and out-line uncommon paths in HphpArray,
to improve icache locality.  Several functions called allocElm()
after resizeIfNeeded(), causing a redundant full-check.  A few
other functions were inlined too much causing code bloat; even
though they're hot, the inlined copies were big and not any more
specialized from the inlining.

* made find() and findForInsert() non-inlined functions
* inline the fast path of findForNewInsert but outline the
search loop.
* factored the allocElm()/nullcheck/resize pattern into a
newElm() function, with the uncommon (full) case out-of-line.
* split initElm into initElmStr and initElmInt, for clarity.
* made copyImpl() out-of-line
* made nvBind() inline since it's just a tail-call to a helper.
Added aggressive ref count asserts to generated code.

Added a new IR node for asserting refcount values. This IR node
is added to every instruction that generates a ref counted type.
Fixed a bug in checking whether rdi is live.

We incorrectly used the register name for rdi in a masking operation.
Improve UnlikelyIfBlock profiling

TRACE=unlikely:2 will key the hits on (function, opcode)
instead of just (function), and unlikely:3 will spit out the same data
as 2 but in csv format.
Fix StableMap::toKeysArray

Fix silly bug in StableMap::toKeysArray() where ints and strings were
mismatched.
IR, reset SrcRec's vector of inProgressTailJumps after a codegen punt

Capture the number of entries in the SrcRec's m_fallbackJump
vector and if IR trace generation fails, throw away the
entries added at the beginning of trace generation.
Cleanups to codegen.

Deleted unused code and parameters.
Fix an incorrect ASSERT

It was asserting on the wrong instruction.
Hack to get LLC counters working on more cpu types
Inline classof (single caller).

Inline classof; it only has one dynamically important caller.
Fix UseUndeclaredConstant in exception.php
Align func prologues to cacheline boundaries.

Func prologues are bulky entry points. We want them to reside on as
few cache lines as possible. Also, rename breaksBB to breaksTracelet,
which is epsilon more accurate.
Make some classes/funcs persistent
Fixing debug_zval_dump()

Initially I thought the culprit was the ref-vs-nonref argument semantics
inside debug_zval_dump(), but after some digging I think the reason is
that m_refCount and m_referenced are not always initialized when
  VariableSerializer::write(CVarRef v)
is called.
Added cgOpEq for string with int

== and != no longer punt when given a string and an integer (in
either order)
Move a test right before a conditional jump

I surveyed all of our cmp and test instructions to make sure they come right
before the jcc or setcc instructions that they drive, because processors
apparently like it that way. This is the only one I found that has non-nops in
between. There are several examples of cmp-nop-jcc, which is due to alignment
gaps and can be fixed separately.
Make pseudomains have fixed context.

Pseudomains are now cloned for each context that they appear in
(when they are included), so we can always assume that the
context never changes.
Supported enregistered string and int keys in the vector translator

This diff modifies the vector translator to pass integer and
string keys to the helper functions in registers, instead of as
pointers to TypedValues. It causes a bit of code bloat with a whole
boatload of templated funcitons but appears to be a net win. The
primary benefits should be slightly smaller translations and fewer
branches in the helper calls (since the key time is determined at
compile time)