Refactor to use more guards

Not sure if I like this yet, but I wanted to try it out.
Wrap up the fsm tuple into a function call
Added the async tag in the wrong spot
Break out a bunch of helper functions and remove guards
Get travis setup