Optimization: use buffer geometry for building models

By using `THREE.BufferGeometry`, we can load the buffer data straight into the GPU and completely avoid processing any of it in the main thread. We can also skip copying the buffers into arrays, which is slow and unnecessary.

This should make a huge difference in eliminating any visible lock-up when new models are loaded and achieving a high frame rate consistent enough for virtual reality applications (#57). It may not make much difference in the basic example, but it becomes evident when new tiles are requested more frequently.