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.
right, I was confused by the behavior with .f = "string" but I get it now. It's like pluck(), neat.

Doc should be good now I hope.