Skip unreachable blocks in IRBuilder::reoptimize()

Summary: Unreachable blocks may contain instructions with inconsistent operand
types, but such blocks may not be eliminated until reoptimize turns
conditional jumps into unconditional ones.  So we need to make
reoptimize work in such scenarios, and this diff accomplishes this by
keeping track of which blocks are reachable during reoptimize, and
then skipping the unreachable ones.

I was able to repro this with the new test case, but I had to hack the
profile-based ArrayGet specialization to stress test it.  So I'm
adding a runtime option to for that.

Reviewed By: @jdelong, @alexmalyshev

Differential Revision: D1680327
Shrink StringData::m_cap to 24 bits to make room for kind

Summary: Use the packedCap trick to reduce StringData's cap field.
Fixes a bug in smartMallocSize() where the debugHeader recorded
the requested capacity instead of the returned capacity.

Reviewed By: @jdelong

Differential Revision: D1646907
Add zlib.output_compression ini option

Summary: We had `zlib.output_compression_level`, but that should only be used if
`zlib.output_compression` is set to "On". Add this option.

This doesn't perform the gamut of the option, but it is a start. I have a TODO
to add more functionality for the option.

http://docs.hhvm.com/manual/en/zlib.configuration.php

Fixes #3744

Reviewed By: @paulbiss

Differential Revision: D1677334

Signature: t1:1677334:1415931492:a151c55a03ccb03b83efc54107f598e9b01150e3
Fix getOldestStartTime

Summary: There was a tiny possibility that apc entries would be
freed immediately, even though they were still in use by a request, because
getOldestStartTime could return a value 1 greater than it should have done.

Reviewed By: @alexmalyshev, @jasone

Differential Revision: D1679072

Signature: t1:1679072:1415898450:3de211d0b25623b01c3018fe99fb0a9ae6be2fe5