DON'T MERGE YET - voxel file corruption guards - partial fix to huge colored voxels in the sky

This fixes some error cases in parsing of corrupt or dubious voxel files. In some cases this will fix the random "large voxels in space" problem that has been plaguing us for a while.

One problem I discovered is that the original (like Jan 2013) voxel parsing code would read from a buffer but didn't check to see if the buffer contained enough bytes to keep reading. This would cause the parsing code to run off into memory and read in garbage. After much debugging, I determined that some of these corruptions were not happening on edits or on file saving (see note below) -- but instead on reading in the files. Sometimes reading the exact same file would produce different results (depending on the state of memory we overflowed into).

Note: there appears to still be a case that causes us to write these corrupt files. I am still tracking that down. But this code will at least handle the corrupt stream case better.
This is a very substantive change to fix voxel file corruptions. Basically, when I tweaked the encoding logic to handle elements with partial data, I didn't account for the fact that voxel streams don't support this concept. They need to know that at each element level ALL existing children will have colors included. The old code would completely bail on the element if any of the colors didn't fit.

My broken change earlier this week would cause in some cases for the element to have some child data written, then since the element wasn't complete, it would get added to the bag to be re-encoded on a subsequent pass. But on that subsequent pass it wouldn't know that some child color data was previously sent and so it would add that again. In the event that the child colors still didn't fit,the element would get added again and again and again - causing a spin out of control and an massive corrupt file.