Added support for ConstraintKinds and bug fix related to lifted list construction

This patch is really two things things in one and I think I should have submitted two different pull requests, but I ended up make the both the changes to a single branch by accident. I hope this doesn't inconvenience anyone too much.

The first change is a new feature - Constraint Kinds. `checkType' would throw an error for a predicate but now its correctly converts the predicates to types. The test case dealing with Constraint Kinds has been updated.

The second change is a bug fix. The parser would accept type lists of the form `[Int, Char, Bool]` but not of the form `Int ': Char ': Bool ': '[]`. I originally tried to do this by only updating the parser but it turns out a new lexeme is required to avoid shift-reduce conflicts. I added a test case for this.