Merging memories and gadget

Implements.

 * Memeory: an abstraction on memory elements that can also be
   allocated locked.

 * Gadgets: These replaces the Implementation classes. The advantages
   are

    1. A unified interface for all crypto primitives, hash, mac etc

    2. Stateful i.e. the internal states are now implemented as
       memories.  By initialising the gadget with locked memory
       element one can make sure that critical data are not swapped
       out.
Raaz module exposes Raaz.Hash
primitives documentation updated.
some touches to the documentation of byte source.
removed import of Control.Monad.State fixed a warning
Optimized sha ref implementation
CryptoStore to Storable restriction for Memory