Make visualization generators return a Visualizer

...use the abstract interface rather than a private type so we can do
nice things to reduce source redundancy in calling code.