support for :keys destructuring

we can't support :strs because strings aren't printed correctly in the
expansion (without quotes, even in maps) and also not :syms because
symbols can't be quoted in the expansion for now.
use fn* and let* as builtins

we need this to be able to redefine fn and let later on.

however, this does not work yet, because somehow the arity checking does
not work. e.g. trying to use `defn` in the definition `defmacro` seems
to broken. ("Wrong number of args to fn: got 3 expected")