Added a Bidirectional Range API to MoveList

This seems like it should make MoveList work with std.algorithm.sort
but swap still will not work. In particular, std.range.hasSwappableElements
returns false because MoveList.front is not a ref from what I can
understand. The reason for the error is still eluding me after
reading through the documentation.

Here is the current list of what's required to make sort work.
(see also http://dlang.org/phobos/std_algorithm.html#sort)

    if ((ss == SwapStrategy.unstable
         && (hasSwappableElements!Range || hasAssignableElements!Range)
         || ss != SwapStrategy.unstable && hasAssignableElements!Range)
      && isRandomAccessRange!Range
      && hasSlicing!Range
      && hasLength!Range)

Even though hasSwappableElements does not work it seems like
hasAssignableElements should since opIndex and opIndexAssign are
both implemented. But MoveList still does not pass as a Random
Access Range for some reason.