Ecdhe

Update of #89, #82, #71, #57, #9

This changes the interface in a small but significant way - curves are now represented by an explicit object with a `name` attribute and some other private attributes.  This approach eliminates nearly all of the error conditions that the previous PRs tried to deal with (and thus eliminates the question of what the exceptions for those error conditions should look like).

It also tweaks some naming to bring it in line with the underlying OpenSSL APIs which is generally how pyOpenSSL naming has been done up to this point.