WIP: mplexporter / pyplot interface

The todo list:

* [x] Translate Cyrille's code to vispy submodule + example.
* [x] Make text display.
* [x] Make `Line` based on `Visual`.
* [x] Make `Marker` a visual.
* [x] Complete support for marker properties.
* [x] Change to use `SceneCanvas`. This should facilitate:
* [x] Deal with different plotting coordinate systems.
* [x] Deal with multiple axes.
* [x] Add image support.
* [x] Complete text display options, with proper scaling and location.
* [ ] Improve image visual quality and fix view transformation.
* [ ] Complete support for line properties.
* [ ] Improve line quality (agg).
* [ ] Make it faster (it's *very* slow currently).
* [ ] Add tests.

Things that would be nice, but not 100% necessary to have things working (and probably difficult):

* [ ] Make collections work (efficiency).

> In this instance, the image should take up the entire viewbox.

In that case, try something like:
```
map_from = [[0, 0], image.size]
map_to = [vb.camera.rect.top_left, vb.camera.rect.bottom_right]
image.transform = STTransform.from_mapping(map_from, map_to)
```
Should the `extent` and `coordinates` args have some effect on the position of the image?

> also update it whenever the SceneCanvas is resized

If the SceneCanvas is resized, then the top-level widget(s) should be resized with it. See the `basics/scene/grid` example--this is the way widgets will be most commonly used, and I hope at some point it will be automated (something like `grid.track_canvas(canvas)`). As long as the ViewBox is ultimately resized, then its `rect` should not need to be reset--the ViewBox will take care of making sure that it displays the same contents regardless of how it is resized.