Delay instrumentation until compilation

Leveraging the compiler to track local scope (`&env` in macroexpansion).

Thus `wrap` now always returns `(wrapm ....)`, and wrapm expands into a wrapped form.
Minor reengineering required for `try/catch/finally`, as we must not wrap the `catch/finally` into macros or the compiler will not notice them. Therefore they are now handled under `try` (which is a bit more correct than the previous approach of never wrapping any `catch` we see).

Also, we can now resolve any `head` symbols we see, thus making sure that we only special case `clojure.core/loop`, and not `loop` from any other namespace. 

Seems like I can't attach pull requests to existing issues anymore, but this mostly fixes #21.