Certificates can now be pickled.

Added reduce method for Abstract class, so pickle can figure out how to create instances of classes generated by implicit/explicit.
I would like to, but I couldn't figure out how to rebuild those classes in a way that equality would work (I create types that look the same but internally python considers them as different). Actually even if you create two certificates from the same entry, they won't be equal. So instead I just run all unit tests on unpickled certificate to make sure that it behaves in the same way.