Splat parameters WIP.

Maybe this isn't the best way to go about this, but this pull request is currently incomplete. I was hoping to raise it here so I could get some answers to questions I had about the compiler source code while I complete the feature. I hope that's okay.

The first question I had is about the Matches object and the Cover type, I wondered what the Cover type is for, why sometimes it is used to delay type checking. I also wondered if you have any advice/guidance about other areas of the code this should touch.

I guess you were also thinking that the splat parameters should end up as tuples? I wonder also if tuples of size 0 could be used (a bit like C++ variadic template parameters) for instances like:

```ruby
def puts(a, *following)
end

puts "hello" # following would be a tuple of 0 length in puts
```

I also wondered, when I pass a type to a function as a non-type argument (like the klass parameters) does this end up being a run-time type argument or would it be a compile time constant and not in the llvm args?