Refactor asynchronous primitive processing

90% of asynchronous primitive processing time was taken up by the browser doing a structured copy of the massive amount of data we were passing around.  This change makes us much smarter about how and when we move data between workers.  It completely eliminates the overhead of the roundtrip steps between createGeometry and combineGeometry as well as transferring the final results.  It does not remove the overhead from the initial createGeometry call, which will be done at a later date.

Most of the benefit is achieved by manually packing the data we need to send into TypedArrays, rather than relying the browsers built in copying mechanism.  We then transfer the array to the worker, which has almost no overhead.  The packing/unpacking code lives in PrimitivePipeline, where there is a set of pack/unpack functions for each worker parameters and results.
Add pragma and doc.
Merge branch 'primitive-prologue' into issue1487
Merge branch 'issue1487' into issue1487-hackery