X509 interfaces

Replaces #1267.

**Update: simplified interfaces so the below questions are irrelevant until we expand them in future PRs**

Two outstanding questions:

- Do we want to blow up when an X509Name has multiple identical OIDs in a single Name?
- Do we want to blow up when an X509Certificate has multiple extensions with the same OID?

These are both things you Should Not Do™, but since it's all ASN.1 under the hood nothing technically prohibits the existence of certificates and names that do this.

A bit more detail than is in the PR:

- `version` will return an enum object that will correspond to v1 or v3. Leaving it an integer is a mistake many other APIs have made to their sorrow.

I've decided to go down the path of keeping the interface small and having `get_extension` and `get_item`. When the requested OID is not available we will raise the exceptions that are added here.
Sounds good.

On Mon Nov 24 2014 at 2:15:42 PM Paul Kehrer <notifications@github.com>
wrote:

> In docs/hazmat/primitives/interfaces.rst:
>
> > +        The serial as a Python integer.
> > +
> > +    .. method:: public_key()
> > +
> > +        :type:
> > +            :class:`~cryptography.hazmat.primitives.interfaces.RSAPublicKey` or
> > +            :class:`~cryptography.hazmat.primitives.interfaces.DSAPublicKey` or
> > +            :class:`~cryptography.hazmat.primitives.interfaces.EllipticCurvePublicKey`
> > +
> > +        The public key associated with the certificate.
> > +
> > +    .. attribute:: not_before
> > +
> > +        :type: datetime
> > +
> > +    The beginning of the validity period for the certificate (UTC).
>
> I am going to advocate we make them naïve datetimes that are defined as
> being UTC. I can update the docs to reflect that.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/pyca/cryptography/pull/1442/files#r20827054>.
>