Change how the libsodium binding work

Fixes #78
Fixes #49
Fixes #68

Instead of all functions being bound to one central module, a module is
provided which gives an easy API for binding the return values from
libsodium constant functions to rubyland constants.  It also allows
defining ruby functions which wrap the libsodium ones, accounting for
the return value.

Also, we avoid calling specific implementations.