Clean up the impl of watch command

Moved watch mgmt logic into its own class to avoid conflating it with
the Shell's state. It'll also make it easier to test & expand.