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.
Character vectors should get converted to a function by `as_function`. The intention is for `keep(x, "a")` to keep all components where `a` is TRUE