Refactor:
* use status codes instead of integers
* break apart usage outputting and make more generic
* other stuff