huge refactor of the cli and tests

- use argparse for cli
- refactor interface to return an emitter/promise
- update dependencies, clean up lib structure
- more and cleaner aliases
- more solid tests