This adds the ability to change clicking pace and introduces the concept of a "token bucket". As soon as a token is put into the bucket (a core.async chan), a click is performed. A separate go-loop puts tokens into the bucket if the clicking engine is active, and then waits for the desired interval. This interval is kept in an atom and can be changed at any time. A convenience function is provided to easily set a new clicking pace.
This adds the ability to change clicking pace and introduces the concept of a "token bucket". As soon as a token is put into the bucket (a core.async chan), a click is performed. A separate go-loop puts tokens into the bucket if the clicking engine is active, and then waits for the desired interval. This interval is kept in an atom and can be changed at any time. A convenience function is provided to easily set a new clicking pace.
This closes #3.