Use iolists as arguments to crypt/2

Simplify the code by accepting iolists as arguments to crypt. The
behaviour of crypt/2 has been changed to always return a binary, rather
than a string.

A new function, crypt_to_string/2, will return the output of crypt as a
string. The naming follows the base64 module.

On memory allocation failures, the NIF will crash the calling process
rather than returning an error.