Abstracted out Ref and CPortabe gadgets into types in Primitives common across packages
Fixed raaz-hash for abstracted CGadget and HGadget
Added HasInverse typeclass

* It now replaces CipherGadget typeclass as it is more general and clean.
* Also added Cipher data type.
Fixed raaz-cipher to use CGadget and HGadget interface
Merge some clean ups to the classes types

1. Abstracted the types CPortable and Ref  into CGadget and HGadget

2. Added the HasInverse class that captures gadgets that have inverse
   operation.