Streamline Unit::merge

Summary:
We're still spending a lot of time in Unit::merge.
This optimizes defClass and defFunc for the case
where the class/func is known to be unique. It also
fixes various issues in the emitter so that builtin
classes and functions, closures and continuations
are all marked as unique.
Fix order of assignment/decref in continuations and Variant

Summary:
Similar to D563995, this fixes more code that assigns a PHP
value so the new value is stored to memory before decreffing the old
value. It's more complicated but unfortunately necessary for
correctness.
Turn pause_and_exit() into pause_forever()

Summary:
pthread_exit can lead to confusing crashes for us: it raises
a "forced unwind", which it seems (strangely) will enter into C++
catch (...) blocks: but if you don't rethrow from one these blocks,
glibc will call abort() from a function called unwind_cleanup.  Our
LibEventWorker has a catch block of this sort that doesn't rethrow, so
calling pthread_exit below there will abort the program.  (The point
of this function is to just wait while another thread writes a
stacktrace file, so there's no reason to exit the thread.)
Fixed class_implements.
Improve the perf of c_Map::reserve

Summary: Improve the code for growing a Map to be more efficient.
Modified collections to use smart allocators.
Support post_max_size for ini_get()

Summary: When asked for post_max_size, return it.
Update doc for Uploading options

Summary: At some point these got moved into their own node.
Revert "Free memory for preg and memcache"

Bisecting in h2e showed this diff is the rev that causes the elevated
stacktrace rate.  I imagine we'll want to debug and fix it but to unblock
getting an rc out for now we'll revert temporarily.
Fix multidim assignments with collections for hphpc

Expressions like "$x[0][1] = 123;" were fataling under hphpc if $x was a
collection, regardless of whether key 0 was present and regardless of the
type of value at $x[0]. Fix that.
Fix verifiability when FPass* are elided

In WholeProgram mode, we would convert FPass*
instructions to their known-at-compile-time
equivalents, and then drop the actual FPass*
instruction.

This broke verifiability. Instead, we emit the
equivalent CGet/VGet, and emit a NopOut FPass*
bytecode.

While I was there, NopOut some hand generated FPassC
instructions too.
Fix collection get() and at() methods

The get() and at() methods for collections were missing a cast from
TypedValue* to CVarRef, causing them to return true or false instead of
returning the value. Fix that.
Fix class typehints in IDL for HPHPc

Forward declarations were missing in the generated headers if type
contained a class name instead of just Object. Add them.

Class typehints in extensions still doesn't work in HHVM, but at least
it's possible to test impact of improved knowledge of types in HPHPc.
src/test/hopt_preparable.php doesn't need 10000000 iterations
Update string hashes to use MurmurHash3.

Update string hashes to use the 128-bit version of MurmurHash3
(previously used 64-bit MurmurHash2).
Fixed code generation bugs in LdThis and in ActRec allocation for magic calls

Fixed a code generation bug in LdThis where we did not
consider the case that the LdThis target is dead but LdThis itself is
not because of its checks. This was causing the destination register
to be reg::noreg. Fixed a bug in ActRec allocation where we needed to
mask in a 1 into the lower bit of ActRec::m_invName for magic
calls. Added a check to TranslatorX64::translate to check if we have reached
the translation limit for a SrcRec. Fixed an assert in SrcRec::newTranslation
that was off by one: When newTranslation is called when a SrcRec has reached
its limit it will cause the number of translations to become
kMaxTranslations+1, so the assert must check that we are one less than that.
Fix crash involving static properties with traits

Some programs that used static properties with traits would cause the VM
to crash while building the Class. Here is an example:

  <?php
  final class Foo {
    use Bar;
    private static $a = array();
  }
  trait Bar {
    private static $a = array();
  }

The crash was happening because was the m_staticProperties map of the
current class was being accessed before it was initialized. This fixes the
logic to directly read m_val from the SProp structure for static properties
declared by the current class to avoid this problem.
Fix crash involving LateBoundCls instruction

The impl for the LateBoundCls instruction was missing logic to handle the
case where there is no late bound class (ex. inside a regular function).
Fix LateBoundCls to raise a fatal error for such cases instead of crashing.
Add missing error checks to copy()

HipHop Fatal error: Unexpected object type stdClass. when copy() is called
with a bad http:// URL source, for example:

copy('http://does.not.exist', '/tmp/foo');
Fix reflection to correctly retrieve doc comments for generators

Calling the getDocComment() method on instances of ReflectionFunction or
ReflectionMethod was always returning 'false' if the function/method was
a generator.

This diff adds the missing plumbing in the parser to make this work
correctly and adds some test coverage.