Partial Kiva code clean-up

This has turned into a somewhat more comprehensive refactor of basecore2d.  This PR includes:

* an ABC for `GraphicsContext`s,
* `basecore2d.GraphicsContext` is concrete subclass of the ABC
* factoring out `LineState` and `GraphicsState` from basecore2d
* modernization, pyflakes, PEP8 over the basecore2d codebase

There is probably some discussion needed about which methods should be in the ABC - there are some differences between those provided by the Agg backend and those provided by basecore2d.
Also, independent implementations (such as agg and QPainter) should at least `register()` with the ABC, but that is not done yet.
Raising not implemented sounds reasonable, but... chaco code checks for the presence of these methods on the context before calling them. If they are there and not implemented, that would be a problem.