Enable "width" projection for range-band-backed BarPlots.

Also refactor BarPlot code to move logic into the base class.
Also make Plot.project() automatically call _render.
Close #551