Fix insignificant typo.
Fix bug with optional args and variadic overloads.

Basically, the compiler would reject forms like
  (fn
    ([[x 1]] x)
    ([x & rest] rest))
which are perfectly reasonable. 0 or 1 arguments will call the first
overloads. 2 or more will call the second.
Add tests for valid overloaded fns.