Logical vectors can be supplied instead of predicate functions

This patch allows `keep()`, `discard()` and `map_if()` to receive a logical vector instead of a predicate function.

Useful when a logical vector is available and the corresponding predicate function is a complicated lambda.
Maybe "A single predicate function, or a logical vector the same length as \code{x}`. ?