Use the BSEARCH() macro in overlap placement

Currently the code rolls its own binary search, but now that we have
a well-tested binary search implementation in obt/ we can make use
of that.
Created a 'GrowToFill' action. (Bug 3356)
Clean up the FillToEdge action implementation

This extend the client_find_resize_directional() method to support
two growing modes, and return a bool for whether it was able to grow/shrink.

The client_find_resize_directional() method now takes an enum instead
of a bool, with two growing modes. The old mode which always tries to
grow, the a new mode that will only grow if the client's edge is not
already at a grow stopping point (ie against the edge of another window).
Allow FillToEdge to grow when all its edges are blocked.

This change points out how useless the return value from client_find_resize_directional()
was, so it also removes that.

When all edges are blocked, the FillToEdge action will try to grow all four edges agin
without blocking any of them on their current edge. This more closely matches the
behaviour of the GrowToEdge action.