Improve case macro impl, add cond/if-let/when-let