Match expressions

@bjz, r?

```clojure
Rusp Repl
> (def foo (fn (a b)
+   (match a
+     (1 b)
+     ("bar" (+ b 1))
+     ((1 2) (+ b 2))
+     ((x .. y) y))))
()
> (foo 1 2)
2
> (foo 1 3)
3
> (foo "bar" 3)
4
> (foo (list 1 2) 3)
5
> (foo (list 3 2) 3)
(2)
> (foo (list 3 2 4 5) 3)
(2 4 5)
```