Create CipherContext interface & document it

* Rename BlockCipherEncryption/DecryptionContexts to just
  CipherEncryption/DecryptionContext
* Moved register to interfaces.py from modes.py since it is generic and
  can be used to decorate the _CipherEncryption/DecryptionContexts