MessageUrn tests and enhancements

First of all are some tests covering previously untested `MessageUrn` functionality: parsing the message type it encoded into a Urn back into a useable .NET type. I called these _loopback_ tests in lack of a better name.

It turned out that in fact `MessageUrn` was not always able to understand its own language once it begun dealing with more complex cases: namely, types residing in assemblies not named after that type's namespace and more complex generics.

As I needed some of the functionality in our current project (especially concerning assembly names), we came up with fixes to the above problems. I do understand some of the changes may seem excessive but I could not find a robust way of parsing nested open and closed generics via regular expressions.

All tests seem to pass just fine (except for some of the integration ones as discussed over at Google Groups), so hopefully we haven't inadvertently broken anything while fixing the described problems!