Better error handling in sqlite; no "self"

Monadic sqlite3 functions were not catching errors thrown by their
wrapped library functions. Also, "self" is apparently reserved. Who
knew? Answer: everyone but me.
Added restriction checking for function arguments

Restriction represents a check to be made, RestrictionError is thrown if
a restriction is unmet. Digging through stack traces is no way to die.
Gave Restriction its own library file and test
Can now restrict arguments that are functions

Real type-checking requires function signatures - including signatures
for function arguments to our functions.
Restrictions for return values; refactor

Now functions can be fully restricted for both arguments and return
values. Reworked the restriction system to be a bit more flexible and
OO.