make it safe to call Done() multiple times
split Delete() out of Done(), make conn available

By separating the Done and Delete functions, we give users the
flexibility to control when job deletion happens (including in a
transaction) and let them return the database conn when they're
completely finished with it.