Shuffle things around to make multiple provider support easier

I keep having to rename stuff to try to bring the heroku tasks up to speed. This creates a common base class that allows newer providers to override behavior.