Schedules

- controller / user API
- adding executor to the listener so events are not dropped
- added a general-purpose distributed lock DAO
If this returns an error, we should at least try and delete the key.