Added support for hash functions, and fixed bugs.

- Replaced the index from a map of std::string keys to a multimap of
  uint64_t.
- Added support for hash functions, and now storing all hashed keys
  in the new multimap. Entries are later accessed in reverse
  insert order, to guarantee that the latest order for a key is
  always the one that is considered first. In addition, locations
  to removed entries are now stored in the index.
- Added new EntryType and used it to replace the previously
  hard-coded of entry types.
- Fixed bug in memcpy() when writing key for removed entry.
- Fixed bug in buffer_copy: the key and chunk were deleted in the
  storage engine, and the buffer manager was still trying to access
  their data. The solution was to move the deletion into the flushing
  method of the buffer manager.
- Fixed bug in buffer_copy: moved the release of the reader count
  *after* the check of order_found, to guarantee that the memory
  pointed by order_found will not be freed before it is checked.
- Fixed bug in use of ByteArray::operator==(): I used to compare
  pointers to ByteArrays, which I fixed for comparisons between the
  objects themselves.