repopick: fix patches that reference paths that don't exist

  * if a specified changeset referenced a path that did not exist or
    was not yet checked out, repopick would attempt to apply the
    patch to the wrong directory
  * also, cache the result of 'repo list'--no need to run it for
    every changeset

Change-Id: Ibc6a1d8cc1e861fc6c0e2ecac45e9d877d31c35f