This is one of the ugly parts of the PR right now (and the comment is inaccurate). At the moment if you want to decrypt you must set the tag in the GCM object. When encrypting, however, after calling ```finalize()``` it will set the tag on the context.

One possible solution would be to remove tag from the GCM object entirely and require users to get/set tag on the AEADContext. This would keep the tag location consistent and allow users to use their BlockCipher object as a factory for both encryption and decryption contexts. The GCM object itself would be reduced to only holding the IV though.

```python
aes = ciphers.AES(b"0" * 16)
gcm = modes.GCM(b"0" * 12)
bc = BlockCipher(aes, gcm)
enc = bc.encryptor()
enc.add_data(b"test")
enc.finalize()
tag = enc.tag
dec = bc.decryptor()
dec.tag = tag
dec.add_data(b"test")
dec.finalize()
```