GCM support
fix buffer size bug for gcm tag fetch
gcm doc fixes
add tag as abstractproperty for modewithaad
rename NotFinalized exception to NotYetFinalized because alex is right

...it does read better that way
_AEADCipherContext refactor

* No longer extends _CipherContext
* Remove _tag from _CipherContext
* This change duplicates a small amount of code from _CipherContext
gcm doc improvements
enforce AEAD add_data before update
invalidtag exception for gcm

This exception is probably not safe. It depends on the assumption that
if ERR_get_error returns a 0 then it is an AEAD tag error.
gcm doc fixes (per review from alex)
rename add_data to authenticate_additional_data for clarity (hopefully)
simplify code for wrapping ciphercontext/aeadciphercontext
raise TypeError if you attempt to get the tag attribute on a decrypt

* To support this the _AEADCipherContext in base.py now needs to be
  aware of whether it is encrypting/decrypting
make _CipherContext in backend.py compliant with AEADCipherContext

* Might make more sense to split it into _CipherContext and
  _AEADCipherContext like we do in base.py, but there would be quite a
  bit of duplicate code.
narrow the potential cases where invalidtag can be raised
document tag param for GCM object
begin adding warnings to GCM mode
explicit backend fix for gcm docs
create AEADEncryptionContext and DecryptionContext
attempt to document the new interfaces for AEAD