Bijection-Clojure

Creating this to start some discussion. Clojure deals with Object ONLY, so none of these bijections is going to be safe with all the casting going on.

Once we decide on a direction, I'll macro-generate conversions for the function types and fill in the rest of the data structures.

Questions:

Does it make sense to make these bijections vs injections? There's no way to detect a casting error other than at runtime, so it's hard to actually return, for example, `Option[Function0[A]]` and have that make any sense.

The same thing applies to the data structures. What's the proper way to handle conversion between `IPersistentVector` and `Vector`? I'd imagine it's with the same casting deal as the functions.