More clean up.
bitRange that works on UnsafeBufferPointer and checks upper bound.
More utility functions.
valueAtOffset was using wrong sizes. DOH.
Various safety fixes:

* Added Message struct below Stream and above Segment. This helps make Stream an abstraction that only exists for serialising Messages and Segments.
* Remove as _much_ reliance on baseAddress as possible. This means structs and lists now need to refer to their index within a segment. This should allow much more range checking.