Modify the API for searching intersections, and add documentation.

The previous code worked, but it was slightly confusing that users
who called search had to make sure they called space.contains or
space.intersects in their Element[A] => Boolean function.

This commit adds a genericSearch method that explicitly takes a
Geometry => Boolean as well as an Element[A] => Boolean. Node's
search and searchIntersection methods both use this to provide
behavior that's slightly easier to reason about.

I also renamed searchIntersecting to searchIntersection because
it reads a little bit better.

Methods in node like searchIterator and foldSearch still do not
support working with intersection. I need to spend some time
thinking about what we should do in those cases.

Review by @kurnevsky (who authored the original pull request)
and @ryanlecompte (who noticed that users could incorrectly
call `Node#search`).