Support writing needed extension types

@nwolfe - Your take on the situation makes sense.  Some comments in-line...

> would rather see the resolution of truthiness happen outside of the library rather than inside just to reduce the possibility of misunderstanding or unintended behavior

I'll grant that this is possible, but offhand, I can't come up with a situation in which calling `(boolean critical)` would result in unintended behavior, so this doesn't worry me much.

> The Java API isn't going to be able to deal with truthiness the same way - you'll have to pass in a boolean. I don't know if trying to make the two APIs the same has been a worthwhile effort (i.e. keep as much of the logic in the Java and just have Clojure provide a wrapper), but it's certainly been a driving factor for how and what we write in the Clojure side.

A good idea, but I would choose to err on the side of doing things idiomatically in each language as opposed to trying to keep them consistent.  That seems like a losing battle in the long run.