initial destructuring for vectors
initial destructuring for maps
add non-lazy implementations of take, drop and partition

and when-let, because we use it for them.
add let+ for trying out destructuring
support :as destructuring on maps
support :or destructuring on maps
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")
don't extend -seq on Arrays twice

now the expansion of ~@ in defn fails, because concat somehow doesn't
deal well with nil arguments.
fix crashing while loading the stdlib
fix compilation

i'm not sure why we have to copy the list, but using the original Array
also does not work, so it's this for now.
use a wrapped array, not a copy and fix -seq
move destructuring into stdlib

i'd like to define it earlier, but it's difficult to figure out how to
make everything work such that it can be defined as early as possible.

there's likely an interesting dependency analysis algorithm in here. :)
add tests for vector destructuring
support destructuring rest as a vector

to support this nth is now supported on ISeqs.
add simple tests for map destructuring
support non-truthy values in map destructuring

previously, if defaults were passed, these would override the values
from the map.
generate fn literals using fn*

they don't need destructuring.
add destructuring for fn
fix the tests.