A stab at check using predicate functions.

A function pattern is treated as a predicate, replacing `Match.Where`.

The constructor pattern is replaced by `Match.Is`.

`String`, `Boolean`, `Number`, and `Object` are replaced with
predicate functions `string`, `boolean`, `number`, and `object`.

In this version `string`, `boolean`, and `number` explicitly succeed
only for primitives, boxed classes are not accepted.

I hope I caught all the places where constructors were being used in
`check` calls... I only made a quick pass through the code base.