implement a simple version of `declare`

it simply sets the vars to `nil`, maybe should throw an exception when
trying to resolve them?
fix with-bindings, rename it to binding & test it

we have to do the `set!` call generation outside of the syntax quote,
otherwise the vars are already getting resolved.
add defprotocol, extend-type and extend-protocol

defprotocol currently just ignores the bodies/argument counts,
extend-type and extend-protocol expand to calls to extend.
indent longer examples in the docs properly
use an ordering when resolving extended protocols

previously, this depended on rpythons hashing, now it's the order of the
calls to `extend`. this allows overriding more general protocols later.
it could be difficult to coordinate ordering across namespaces, but that
shouldn't be an issue because it was essentially random before.
ensure extend-protocol respects the order of the extensions
provide more precise error messages in load-*'d files

we use the MetaDataReader for that, are there performance problems with
that?
add a simple version of for

without `:when`, `:while` and `:let`.
add identity
add mapcat and merge-with
add if-let
add a very simple version of use
add html docs generation example
fix tiny typos
make the html doc signatures a bit prettier
add defn-

equivalent to defn, but adds `^:private` to the metadata of the function
being defined. tooling can the decide what to do with it.
add test for identity
add tests for when, when-not, when-let and if-let
fix when-let and if-let with destructuring
add a test for mapcat