PR of initial master commits

I have moved the calculation for max delay outside this method.

As for making it asynchronous... doing so then means that the entire timer must block until the callback is triggered. This is counter to the expected behaviour. 

This method is meant for simple calculations, not hitting databases. In such a case, it would behove the developer to pre-fetch whatever data they need in advance of this method being called.

To achieve this method in an asynchronous way, we would need to measure the time between the caller being handed over and it being executed and then determining whether another timeout may have occurred. Or multiple for that matter.

As I said before, this method is meant to be treated as a wrapper around a member variable. Nothing more.

If a developer requires to do complex logic in which the delay changes with each 'tick'. there will be an emitted event for that: instance.on('tick').