Should we make remove synchronous to provide a better API experience for users? I noticed in the test below this there's a remove then .sleep to account for this, but a hardcoded sleep isn't really good enough - we either need some kind of callback from Quartz when the job is removed or poll in a loop on the user's behalf.