Clean up custom hash functions

This change eliminates most custom hash functions where possible, e.g., using
std::hash<std::string> instead of a custom hash that calls .c_str() on the
string and then hashes the address of the C string.

It also introduces a simplistic C string hash function and equality predicate
that can be used when the data stored in the hash container is actually a C
string.

This change has only been tested with Clang 3.3svn on OS X, and has not been
evaluated for performance.

I think this closes #21.