Refactor rqt plot

Factor out the plot backend into a proper abstraction so that I can attempt to use it elsewhere

Future work will probably move the plot abstraction into rqt_py_common