[WIP] Add Persistence extensibility per storage type

With NServiceBus Azure transport, persistence for Subscriptions and Timeouts could be done to different Azure storage tables. It was achieved through the following code:
```c#
 var bus = Configure.With()
                        .DefaultBuilder()
                        .UseTransport<AzureServiceBus>(() => connectionString)
                        .AzureSubscriptionStorage(connectionString, createTable, tableName)
                        .UnicastBus();
```
With NSB V5 we have switched to use `PersistenceExtensions<T>`, where `T` is a transport defined `PersistenceDefinition`.
Unfortunately, ability to customize persistence per storage type (`Sagas`, `Timeouts`, `Subscriptions`) was lost when moved to V5 leaving customers with XML config file or `IProvideConfiguration<T>` workaround ([NServiceBus.Azure issue #213](https://github.com/Particular/NServiceBus.Azure/issues/213)).

This pull-request is an attempt to add persistence extensibility per storage type into V5. Sample above would be implemented as
```c#
config.UsePersistence<AzureStoragePersistence>();
config.UsePersistence<AzureStoragePersistence, StorageType.Subscriptions() // override settings for Subscriptions only
          .ConnectionString(connectionString)
          .TableName(tableName)
          .CreateSchema(createSchema);
```
and transports would allow extensibility as the following NServiceBus.Azure sample snippet:
```c#
    public static class ConfigureAzureSubscriptionStorage
    {
        public static PersistenceExtentions<AzureStoragePersistance, StorageType.Subscriptions> ConnectionString(this PersistenceExtentions<AzureStoragePersistance, StorageType.Subscriptions> extentions, string connectionString)
        {
			// register connection string to use for keeping subscriptions when Azure storage persistence is used
			
            return extentions;
        } 

        public static PersistenceExtentions<AzureStoragePersistance, StorageType.Subscriptions> TableName(this PersistenceExtentions<AzureStoragePersistance, StorageType.Subscriptions> extentions, string tableName)
        {
			// register table name to use for keeping subscriptions when Azure storage persistence is used
			
            return extentions;
        } 
        
public static PersistenceExtentions<AzureStoragePersistance, StorageType.Subscriptions> CreateSchema(this PersistenceExtentions<AzureStoragePersistance, StorageType.Subscriptions> extentions, bool createSchema)
        {
			// register if table should be created for keeping subscriptions when Azure storage persistence is used
			
            return extentions;
        } 
    }
```

@Particular/nservicebus & @Particular/azure please review/comment. Thank you.

### Items to address
- [ ] Fine tune obsolete on `Storage` enum base API
- [ ] Write documentation
Don't think so, `HasSupportFor<T>()` is public since its used in [other places](https://github.com/Particular/NServiceBus/blob/59543e3d3c64168d37fe534aa746b716650a0aae/src/NServiceBus.AcceptanceTests/ScenarioDescriptors/AllOutboxCapableStorages.cs#L16)