Several big changes:

* Changed PtrState to a record to make life easier, along with necessary
  changes needed to make that work.
* Changed the name of the base parser to Decoder - This will be split off
  into another package eventually, once I've decided on an appropriate
  API.
* Removed the PPSetDest constructor - This is now done through the
  `allocateDest` function which returns the ByteString formed by the
  current destination. This should be the only way to set and get the
  destination so that we never modify the destination after turning it
  into a ByteString.
* Implemented a more optimised version of getWordNLE based on peek - This
  should be faster, but is not currently system endian agnostic. TODO:
  add functions to convert between system endian and little/big endian.
* Removed the setSource function, this should only ever be done through
  Partial results.
* Changed transfer to be a little more efficient by only checking if
  there's enough room in the destination buffer once.