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.
They will still get an error (wrong number of args (4) passed to if-letk) which is good enough for other fns and macros (including those in clojure.core, e.g. `for`), so I don't think it's necessary.