Separate publisher and provider

This allows us to have multiple instances of a publisher that are all
belonging to the same provider. This is useful for things like holding
multiple connections or channels.

@rosscooperman