Added public key encryption

The tests are adapted from the libsodium tests.
The docs are adapted from the rbnacl docs.
Public key encryption is here
Fixed issue getting raw keys with Py3
Correct the name of the algorithm
Use the new nacl.utils.random location
Enable deriving PublicKey from a PrivateKey

* Uses lower level functions to generate a public_key from a private
  key.
* Reworks the generate method to just generate a random value.
nacl.public.Box is not encodable

* Removes the broken ability to encode a nacl.public.Box
* Internal refactoring
Fix single quotes by making them double quotes
Generate the shared key upfront
Fix key generation
Make Box Encodable to bytes
Rename *_SIZE to just SIZE
Merge pull request #19 from dstufft/public-key

Public Key Encryption