VASM fixes and instruction counts.

Summary: Add counters for HHIR and asm instructions for testing to make
sure vasm doesn't regress instruction counts. Also squashes various
changes to the vasm code itself, from higher up the vasm diff-stack.

Includes two passes: jump optimizations and dead code elimination,
however separate diffs will actually enable these.

fixes:
* Adds checking to make sure we don't assign to a vreg constant.
* moves pretty-printing code to vasm-print.cpp
* print area and predecesesors of each vasm block
* adds a SrcKey field in each Vinstr, for generating bcmaps
  (will probably change this to an IRInstruction*, thx @swtaarrs)
* actually populate bcmaps
* ripped out the area-coalescing logic; even if areas map
  to the same CodeBlock, we still want to order blocks by
  main/cold/frozen.
* only the last block in main can be closed with end{}.
* remove nops (useless copies, etc) after vasm-xls
* handle loop-carried live ranges in vasm-xls (yay, loops!)
* only use xor r,r for explicit ldimm{0}s, not xls-inserted ones.
  (so we don't accidentally clobber flags)

Reviewed By: @alexmalyshev

Differential Revision: D1494657
JSON_NUMERIC_CHECK shouldn't cast keys to numbers

Summary: See php bug 55543
Closes https://github.com/facebook/hhvm/pull/3470

Reviewed By: @fredemmott

Differential Revision: D1500288

Pulled By: svcscm
VASM part 1: convert a few HHIR ops to exersize ldimm,copy,branching

Summary: First in a series of diffs to migrate to VASM. Vauto makes this easy-ish
by collecting vasm instructions, then generating X64 asm when it's
destructor runs. By inserting Vauto uses into wider and wider contexts,
RAII style, more swaths of CodeGenerator can be converted.

Reviewed By: @alexmalyshev

Differential Revision: D1460360