Handled all limitations on input size.

- Created new method MaxInputSize() for all compression and hash functions.
- Made the checks on the data input sizes dependent on the compression and
  hash functions used, i.e. the MaxInputSize() methods. If no compression
  is used, the max input size only needs to be max of int32.
- Added notes where necessary about the first-and-last-chunk problem.
- Implemented the split of chunks into smaller chunks in case they are
  larger than the maximum chunk size. This is important for the
  first-and-last-chunk problem, and for the fact that compression
  and hash function have limited input sizes themselves.
- Fixed bug in Offset Array management for large entries.
- Implemented the new IsLarge() and IsMiddleOrLastChunk() methods for
  the Order class.
- Renamed WriteChunk() to WriteMiddleOrLastChunk().
- Created new SmartByteArray class.