Spruced up the core typeclasses.
Lost my mind and reattempted contravariance.

CROSS FINGERS.

The necessary change to TestRunner makes me properly nervous.

[error] /mirror/r/std/src/test/scala/TestRunner.scala:22: diverging implicit expansion for type psp.std.Eq[psp.std.Predicate[Int]]
[error] starting with value arbBool in object Arbitrary
[error]       new AlgebraPoliceman[Predicate[Int]]("Int => Boolean"),
[error]       ^
[error] one error found

Now: new AlgebraPoliceman[Predicate[Int]]("Int => Boolean")(?, ?, Fun[Int])