Allow provider to be set per request (bug 987906)

Another messy diff but the concept is that it allows the payment provider (e.g. Bango, Boku) to be set per request rather than now which is to set the payment provider via settings once when Django starts up. It still sets the provider with settings because actually setting it per request will come later. As part of this I also abstracted some of Zippy's notice handling (not touching Bango) because Boku will use this abstraction.