Refactor tracking module

- added specs
- fixed various bugs
- kept api in tact
- split code branches into separate functions
- separated channels into a new module
- make args naming consistent across module