Refactor NativeData header

Summary: Move the NativeNode to the beginning of the allocated block,
and add kind and offset fields so we can locate the attached
object data during sweeping. Reduced the sweep node from
16 bytes to 12; If a NativeData custom struct is 4 bytes or less,
it will also pack in after the header.

Changed the NativeData sweep list to a vector; each object only
needs a 32-bit index into the vector. Insert and delete remain O(1).

Reviewed By: @jdelong

Differential Revision: D1652391