Use heap parsing for objprof

Summary: Parsable heap means we don't need a hashtable to keep track of objects.
Change heap iteration to take a snapshot of the objects in the heap,
then iterate over them. Populating a vector of pointers is probably more
efficient than using the unordered_set for a single snapshot, but could
lose if many snapshots are taken in the same request.

Looking at the inner loop code in objprof_get_data/strings, I don't think
the snapshot cost is significant; they're converting objects to arrays,
accessing the arrays, and so on. Taking a snapshot also avoids mutating
the heap (allocating arrays, etc) while we are iterating over it.

Reviewed By: @markw65

Differential Revision: D1711579
Convert WddxPacket to use StringBuffer instead of std::string.

Summary: Convert WddxPacket to use StringBuffer instead of std::string.

Reviewed By: @edwinsmith

Differential Revision: D1714927