Add if-letk and when-letk variants

Mostly based on the canonical Clojure implementation of if-let and when-let with a few small changes and a side order of tests.
i.e. `(if-letk ~bindings (do ~@body))`, and let that handle the assertions and everything ?