Add operators for working with unary predicates

+1 for all the suggested operators acting on boolean unary functions (with expansion to general boolean returning functions when we have variadic generics, as mentioned by @allevato)

I frequently find myself wishing for more expressivity when using predicate functions, and so I end up defining these operators so I don’t have to create cluttered little closures:

I also find myself writing things like this manually (in-fact I even pointed one of these out recently SE-0197 — Add in-place remove(where:) - #25 by aidantwoods), so there are at least a few of us already doing this for what it's worth.

Also +1 from me on the suggested composition operator.

I think adding function operators like these is great, and really speaks to welcoming functions as the first-class types that they are by allowing them to be combined or transformed :)