add sshark reactor

This moves component-specific logic out of basil and into the component's
sub-package.

Also, StateWatcher now calls the callback with an io.Reader, instead of
reading the file into memory and passing it to a parser.