Use Door transactions instead of manual locking & unlocking

_Depends on PetroFeed/doors#2_

As mentioned in the above PR, it thought the code could use transactional locking. Here it is. This was more for my own familiarity with roach, but if you like the idea and need more tests or other changes, let me know.

Since the transports don't have tests, I don't know for sure if this PR is bug free. But the Doors PR does have some tests.