Merge changes to facilitate blake like hashes

The previous interface for gadget was not sufficent to capture the
final block of compression of a HAIFA hash like blake. While the
length hashed so far can be kept inside the Memory element of the
gadget, the previous implementation did not provide a way to pass
the actual size to the final stage of hashing.
Changed design of Cipher type

* Removed mode from cipher as stream ciphers have no associated mode.
* Now mode will be captured in the cipher name.
Fixed AES according to Cipher datatype change
Added tests for gadgets with HasInverse
encrypt . decrypt == id test added for ciphers
Salsa20 eStream cipher

* Implemented Salsa20/20, Salsa20/12, Salsa20/8 in pure haskell.
* Added ecrypt test vectors
* Moved AES tests to its own directory