Implement #29, #30, #14

 * change default number of uses to 1 (specified in schema)
 * change "RESULT_" constants to be textual strings for simpler debugging
 * change visibility of crypto_rand_secure() to protected
 * change visibility of create_nonce() to protected
 * tokens no longer require specifying a value to store
 * properly implement expiration using intervals
 * nicer exception details for failures due to duplicate id's
 * change visibility of destroy_token() to public
 * get_token_data() doesn't specifically care about expired/non-expired, gives more useful information like time_remaining and remaining_uses (values derived in SQL)