Add a comment explaining fuseHalfBranch

I forgot to do this before submitting the previous diff.
Added context for InvalidDerivation error

Added additional context when throwing the InvalidDerivation
error
Remove some dead code in type_variant.h
Remove unused log types

I'm trying to do a cleanup of some of our logging code, and as a first
step, I'd like to clear out some unused logging functionality. This
removes Log Aggregator (AFAIK, this has not been used at least recently
we have other infra that does the same stuff) and the ability to log
to syslog (never going to be used)
Handle empty string types
Pass HPHPc's function return types to HHVM

HPHPc can often infer function return types, although those types might
not be 100% accurate because values can also be Null.  This diff stores
those types in the bytecode meta-data and uses them in the JIT to
generate better code.

In the general case where values may also be Null, the information is
passes as a prediction.  In some cases, HPHPc guarantees that the type
is Null, so these cases are passes in as inferred and not predicted to
save the check altogether.

Also, if HPHPc's predicted type is not ref-counted, we know for sure that
the values is not ref-counted (because it's either that type or Null).
So use that fact to avoid generating any code for PopR in those cases.
Hack: add support for class Foo<T as X>

We often need the ability to constrain the generic parameter T.
Huge pages for low_malloc.

Low-memory items are likely to be long-lived, and randomly
accessed. Map them with huge pages.
More compact FPush/FCall code

Although the code was already using 32 bit moves when the
TCA's/Func's and Class's were in low memory, it can instead
do store immediates for those cases.

Also, for directly bound builtins, we were incrementing rbx
twice. Combine the two increments.
Add a "silent type"

We would like function foo(@int $x) to be equivalent to not having
any type information (i.e. equivalent to function foo($x)).

For now we are going to silently drop the type. At some point in the future,
we'll keep the type information around and log mismatches (but unlike a normal
type hint, we don't want to fatal in case of mismatch).

This kind of silent type is going to be useful to automatically migrate code
from php to hack.
Use smart_malloc/smart_free when possible in preg.cpp

preg_match_impl was showing up in perf as the top cause of
dTLB load misses from free before this diff.
support compact protocol v1 in thrift_protocol_read_compact

Product uses v1 to store hitdata and docdata in indexes,
but ##thrift_protocol_read_compact## currently supports only v2.

This diff adds reading and writing support for
compact protocol v1.
Update ext_hhvm generator to catch more ext source files
Make strlen() an opcode

It's the second most-called builtin in production (after idx()) and the common
case of a string argument is incredibly simple to implement (pull the m_len
field out of the arg, decref) so let's jit it.
ArrayData wrappers for litstr, CStrRef, CVarRef

Create inline wrappers for the litstr, CStrRef, and CVarRef
ArrayData apis, and remove them from the implementation classes.
Now each method only needs int64 and StringData* overloads.

Added a few StaticString definitions to avoid using litstr methods,
in operators.cpp, ext_error.cpp.

Fixed a bug in the compiler to convert literal bool keys to int,
rather than relying on HphpArray doing it internally.

Later patches will clean up callsites that already have StringData*
so they don't have to use StrNR or other such wrappers.
Fix AutoloadHandler for Closures

AutoloadHandler::getSignature() uses the callback
name, which for closures is just Closure::__invoke
(or Classname::__invoke for other invokable classes).
Follow the array($object,$method) pattern of appending
the address pointer to the signature to differentiate it.
Formatting proposal for semiLikelyIfBlock

Format it more like a control structure (one less indent on
the function arg list).
Update IDL files for lz4
Make some JccBlock branches prediction friendly

I profiled our JccBlocks to see which ones are taken often
(see the attached task). If a JccBlock is taken the majority of the
time it's probably going to be causing a bunch of branch
mispredictions, so I've reorganized the lopsided ones to make the
forward jcc the uncommon case.
Func::m_shared needs to be AtomicCountable

The refcount gets updated from multiple threads at once.