Refactor to support multiple CLI commands
The previous CLI behavior has been moved to a serve
subcommand, which is a breaking change.
This was originally part of !85, but I've pulled it into a separate MR because it's independent and also blocks #72 (closed).
Edited by Olivia Lee