Add sparse_id_set and sparse_id_map containers

Summary: The map version can replace some StateVector usage with less
construction cost (StateVector has O(N) creation), and it can replace linear
scans for things like refineLocalValues in frame-state (or a similar thing for
load-elim).  The sparse set might be useful but I don't have a specific use
case right now.  I suspect there are a lot of hphp_hash_sets or maps keyed on
SSATmps we could replace in various passes, too.

Reviewed By: @edwinsmith

Differential Revision: D1672139

Signature: t1:1672139:1416059793:91fe214d1ac1d0e31f9c9e15c59298eda4544f6e
Add a pass to assign ids to abstract locations and compute may-alias info

Summary: Change the store elimination stuff to use it, which means it can
eliminate dead stores to heap locations (at least in contrived examples).  (The
LocationAnalysis doesn't need to be recomputed every time we do store or load
elimination, so it'll probably be an argument to optimizeMemory eventually, but
not for now.)

Reviewed By: @swtaarrs

Differential Revision: D1684012
Add sparse-id-containers support for lookups with non integer types

Summary: First time I tried to use it I wanted to give it an SSATmp* key, which
it didn't support.  Make it support structures that convert to ints by default;
for pointers you need to pass a converter.  In the jit add some type aliases to
make that short and use it at the one use site.

Reviewed By: @edwinsmith

Differential Revision: D1684325

Signature: t1:1684325:1416235658:7685412f24703675d719abaed9701329e623dcf4
refactor smartMallocSizeBig

Summary: For jemalloc, it uses a never-inlined helper. otherwise, it
is layered on top of smartMallocBig, and I wanted to break
the dependency of the size-tracked allocator api on the guts
of smart_malloc. (ultimately, so big size-tracked don't use
BigNode at all).

1. make smartMallocBigHelper return a pair<void*,size_t> instead
of returning ptr & size by ref. (the ptr-by-ref arg was unused!)

2. move smartMallocSizeBig to memory-manager-inl.cpp, since both
paths would make a call anyway. (I'm counting on big allocations
not being very hot).

3. inline smartMallocSizeBigHelper into the jemalloc version of
smartMallocSizeBig

4. Factor out common code so just the different parts are #ifdef'd.
It would be nice to use if(use_jemalloc) instead of #ifdef, but
that would break the non-jemalloc build.

Reviewed By: @bertmaher

Differential Revision: D1690829

Signature: t1:1690829:1416421088:4b692cdabc235eb8b6a223a9de8cbb211679c749
Add plumbing to allow Hack build to hook into filesystem and php changes

Summary: Do file filtering later in hackProgram and introduce two new hooks to run before rechecking and after rechecking with a list of files that have changed and the current state of the world.

Reviewed By: @​jcreed

Differential Revision: D1685460

Signature: t1:1685460:1416413160:d08a044491ba09c96f105dfd32f88c68aa337fec