Refactor CLI and add tests
This MR involves taking out all the business logic out of the CLI and placing that functionality in their corresponding modules. In addition, a variety of tests were added.
This MR involves taking out all the business logic out of the CLI and placing that functionality in their corresponding modules. In addition, a variety of tests were added.