Optimizations

- Changed BinaryReader to use typed arrays for the array reading
methods. This is much faster than using native arrays.
- The vertices chunk in M3 is no longer parsed, but instead sent
directly to the GPU. The parsing takes place in the shaders.
This reduces parsing time greatly, and reduces bandwidth by 60%.