Metamodel for sagas

This pull adds a saga metamodel that paves the way for many of the planned saga features.

The main thing with this pull is that mapped properties are now automatically unique. The inmemory persister is already modified to support this:

https://github.com/Particular/NServiceBus/pull/2416/files#diff-17e8d72500928dcb599bc890835658eeR80

Since the other persisters needs to be modified to look at the metamodel we need to wait until v6 before we can fully complete this. (I'll raise separate issues for those modifications)

I've also killed off  the brittle `with_sagas` tests that are now either covered by real unit tests or acceptance tests.

Next step after this pull is to fix:

https://github.com/Particular/NServiceBus/issues/2080
https://github.com/Particular/NServiceBus/issues/2442
https://github.com/Particular/NServiceBus/issues/313
https://github.com/Particular/NServiceBus/issues/313

which all should be quite a bit easier after this.

I'll rebase after the review is complete
Validation? Currently all sagas are types so there is no way I can create a saga with invalid name but since this opens possibilities for sagas not tied to .NET types...