blah blah blah

Split IInput/IEvent.Source into separate Type and Id properties for
easier predicate matching.
Invalid predicates now throw exceptions just like everything else.  Can
change/improve this when I work on error handling properly.