Polymorphic checking

Add some basic polymorphic checking, although only for kind *.  It can be fooled since it just checks that the python types are the same, so for example

```
@guard("(~a, ~a) -> ~a")
def foo(x, y):
    return x

foo(5, 12) #Passes
foo(5, "Hello") # Fails
foo([2, 5], ["Hello", "World"]) # Passes since both are lists
```

Even so, it does make progress.  Seems like full checking (higher kinds, catching the list error above) will require the full type inference and unification machinery.