Simple in-memory promise-based task queue with support for pausing, merging tasks, or retrying failed tasks