Code refactoring, tests, adds sets and timer_data support.

Took the afternoon and gave this module a little love.

* Refactored a good amount, removes `async` as a decency.
* Added a bity test suite
* Added support for sets and timer_data