==WIP== Create ArrayTracer to trace array usage in the runtime

Summary: ArrayTracer aims to track the creation and use of arrays throughout the HHVM
runtime. For ease of use it's enabled as a runtime flag -vEval.TraceArrays=true
which defaults to off.

It works by wrapping the functions in the ArrayFunctions g_array_funcs table
with a function that records the ArrayData pointers it sees, classifying them
as either static or request local, and then storing them in their respective
maps from ArrayData* to ArrayUsage. ArrayUsage just records what has happened
to a specific ArrayData, which gets fed information by the intercepted calls
to g_array_funcs. For example, a call to g_array_funcs.setStr will set the
string key flag on the ArrayUsage.

Reviewed By: @edwinsmith

Differential Revision: D1539544