BaseKit Tweaks.

Add a generic allocator to the `Data` class. This saves us from having to cast and check the result of `std::malloc`.

* library/source/Data.h
* library/source/Data.cpp

Update `DataReader` to use the `Data::ConstPtr` type instead of `std::shared_ptr` directly. Also change the exceptions we throw to better indicate the programmer error.

* library/source/DataReader.h
* library/source/DataReader.cpp

Update the `SHA1Digest` implementation to use the `Data` memory allocator, which saves us the trouble of having to check the result of `std:malloc` and including a few headers.

* library/source/SHA1Digest.cpp
Add `MutableData` Class.

Add a subclass of `Data` to allow allocating buffers that can be written to by the caller. This is then essentially a smart pointer for a heap allocated buffer, with the ability to cheaply transfer the bytes to an immutable class.

* library/source/Data.h
* library/source/Data.cpp

While we're here allow DataReader clients to get the length of the byte stream, in addition to the current position in the stream.

* library/source/DataReader.h