Adding support for multiple alignments

Adding support for multiple GIZA++ alignments (an n-best list) requires a lot of fairly substantial changes to my current infrastructure.

Firstly, I've added some code to read the new format of alignment file, plus an extra option in the configuration file to specify the alignment file format.

Unfortunately, the current system has no way of storing multiple alignments for a single example, so I've made some significant changes to the ExamplePair class to accommodate this. I've also added a caching system for example pairs to increase speed.

ExamplePairs depend heavily on Tokens to perform the underlying functions, particularly to keep track of which source token is aligned to which target token. I've implemented a layering of alignments at the token level so that each token can have multiple alignments, each with its own score.

I'm now looking at the SentenceTranslator class, where the actual transfer is performed. The current implementation uses TranslationPairs and SourceTokens to represent the output, but these currently have no support for multiple alignments. They also are unaware of phrases when producing the output, so tag each word individually. This needs to be changed, urgently.