tts/dictionary.cpp: switch to shared_ptr<buffer> keys

This replaces std::unordered_map<std::string> with
std::unordered_map<std::shared_ptr<cainteoir::buffer>> using the
DJB2 hash algorithm.

The hash algorithm was tested by running:

	$ tests/dictionary --time HP1_Philosophers_Stone_en-gb.epub

using different algorithms:

	algorithm     : mean   : performance
	--------------:--------:------------
	baseline      : 0.0472 : 100.00%
	DJB2          : 0.0560 :  84.20%     [1]
	SDBM          : 0.0562 :  83.95%     [1]
	Rotating      : 0.0564 :  83.59%     [2]
	One-at-a-time : 0.0567 :  83.23%     [2]
	CRC32         : 0.0570 :  82.76%     [2]
	std::string   : 0.0599 :  78.80%
	K&R 1st ed.   : 0.0622 :  75.88%     [1]

where each algorithm is measured against not adding entries into the
dictionary, just parsing the file into words (thus, the closer to
100%, the better). The std::string algorithm is the performance of
the previous std::unordered_map<std::string> implementation using
g++ 4.7.

Each result is the mean time from 10 test runs. All results have a
standard deviation of 0.0004-0.0006.

Other algorithms like Murmer3 [3] and CityHash [4] were considered,
but these are magnitudes more complicated to implement and have poor
performance on small strings.

[1] http://www.cse.yorku.ca/~oz/hash.html
[2] http://www.burtleburtle.net/bob/hash/doobs.html
[3] http://code.google.com/p/smhasher/
[4] http://code.google.com/p/cityhash/