Added some new sources and sinks classes, and adjusted the interface to
the cryptor
Updated the hash implementation significantly, so now it's a template
class.

This is better than before, because before if you needed to use only one
type of hash, you would still have to build ALL types of hashes into your
application. Now that they're template specializations, if you statically
build the library then the linker will only pull in the exact hash
functions you use, thus reducing link time and the size of the executable.
Upgraded the cryptor to support two-factor authentication. Now you can use
keyfiles and passwords together to encrypt.

As a side-effect of these changes, it is now safe to encrypt null
plaintext alongside null auth data, because it uses the auth data channel
regardless of whether you provide data for it or not.
Added a convenience function that lets you instantiate a hash object at
runtime. The caveat is that you have to link with all hash types, so you
have to be sure of what you want. In most cases it's better to allocate
the templated object at compile time.