Add a new director method "->resolve" which returns another backend to use.

This is called recursively until we get to the bottom of the pile.

Doing it this way means that "pick one" directors dont need to know
about other methods on directors and can concentrate on just picking.

It also prevents us from eating up a lot of stack.