Move path behaviors into new PathBuilder classes.

Because of differences in Windows and POSIX, there isn't a simple way to
use common code to handle both of them.  This moves the
_getPotentialCommandLocations logic into a new
PathBuilderInterface::getPermutations method that is defined for both
WindowsPathBuilder and PosixPathBuilder.

The interface to the locator factories does not change, so this does not
affect usage of them.  However, the Locator class itself has changed.
It no longer takes an array of paths in its constructor.  Instead it
takes an instance of PathBuilder, so in order to use it directly you
have to first create the appropriate PathBuilder.
Make the ExecutableTester instance private.
Move executable tester to Locator constructor (optional).

There's no need for a getter/setter here.  It makes more sense as an
optional constructor parameter and helps clean up the exposed public API
of the class.
Don't create a new locator in the locate multi tests.

This change should have gone with the PathBuilder changes, but because
the locator instance no longer needs the paths to be given to it, we can
use the standard locator for these tests.
Fix the which CLI interface.

This was never updated when switching to the locator factories.