mirror: Proper exit when preparing diff returns an error (#2681)
mirror: Proper exit when preparing diff returns an error (#2681)

A bad synchornization between startMirror() and its caller mirror() happens when preparing the difference of objects between source & target returns an error: mirror() quits when it receives an error from startMirror() without give a chance for that latter to properly stop the parallel mirror manager.

This PR will:
1. Quit mirroring when listing returns an error: this means calculating diff needs to stop and no further action needs to be taken since it can be dangerous especially when --remove flag is passed.
2. Properly stop parallel mirroring manager before quitting.
krisis/mc,balamurugana/mc,minio/mc,krisis/mc,balamurugana/mc,vadmeste/mc,minio/mc,vadmeste/mc