Changes to verify functions

Raising versions renamed to bang methods, non-raising ones replace them
Specs for key equality and lexicographical sorting

A shared example group that should cover most of the cases for both
equality and sorting.
Implement key comparison

Closes #27

Keys (Public, Private, Signing, Verify) can now be checked for equality
and also compared lexicographically.  In addition, the check for
equality is done in constant time.  But I'm not sure if the way the
checks are done means we leak anyway.  Perhaps its best to define
equality specifically anyway...
Paranoia equality

Because I don't know quite how <=> and Comparable interact to define ==.
So err on the side of safety, by explicitly defining it
Merge pull request #28 from cryptosphere/dev/compare

Implement Key Comparison
Crypto::Point API for Curve25519

So I've been learning a little bit more about Edwards curves, and I was
thinking about the OpenSSL::PKey::EC::Point API (as horrid as that name
is, and as horrid as the API is) and thought this might be another way
to rework scalar multiplication into an object oriented API.

How did it turn out? OK, I think, it's object oriented, but not really
arguably better except that with another line of code it could have some
(somewhat useless) support for encodings. I left that out for now, but
you can see how with the standard group element constant declared as
hex being able to decode hex would be nice (many on the #tahoe-lafs
trolled the previous serialization which started "\t\0\0..." ;)

One thing I don't like about the API is that apparently the commonly
accepted ordering for group multiplication is:

    integer * Point

This API forces:

    Point.mult(integer)

Which is effectively backwards.

I didn't preserve the original class methods, but with the ability to do
Crypto::Point.base.mult(integer) I really don't think it matters.
Can't touch this
Can't touch this either

We should probably be doing this everywhere, actually...
Could probably use one of these too
Define all util methods as module_functions

Potentially we can now mixin, but also this is a little cleaner
Add check_length method to Util

Also, add a specific class for that error
Also catch nil strings

And differentiate this from length, since nil is more indicative of
caller error (probably)
Fix nil error message
Util functions use check_length
Box and SecretBox use Util.check_length

Hopefully this will make the code climate slightly better.  Also, we
have standardised length errors
Make Keys use Util.check_length

Standardized errors ftw
Crypto::Point#to_str

I think this removes the main remaining objection to this API
Documentation for Crypto::Point

Now that I understand elliptic curves just a little bit better, I think
I'm actually able to explain this stuff better too. Yay!
Merge pull request #30 from cryptosphere/points

Crypto::Point API for Curve25519
Fix for style