A bit more code cleanup.

I notice the actual implementation of parameter matching here was broken - 
if the last parameter matched, it would always pass. Doh.
Refactored conditional invocation matching to use constraint objects.

Removing if statements and nil checks FTW!

This will form the basis of the state implementation, and in the future
sequences too.