fix unwinding locks when one fails

The previous code only happened to work because FileLock was always
mandatory and was always first.
add MockBackend
refactor test to use MockBackend
refactor Genome/Sys/Lock.t to be independent of backends