Fix assumeUTF

Felt [#2341](https://github.com/D-Programming-Language/phobos/pull/2341) completely lacked quality control, so here's a few fixes.

* Now supports shared (though not tested because `validate` does not support it, but a non-debug build will support it)
* Shortened implementation considerably
* Uses template constraint instead of static assert to reject invalid calls at the call-site
* Documentation now references `representation` instead of `assumeUnique`. The relationship between `assumeUTF` and `assumeUnique` is pure trivia, while `representation` is its counter-function.
* Annotated with nothrow, and annotated unit tests.
* Fixed wrong naming convention used in one of the unit tests.

Then again, this seems like copy paste code from `representation`. It's still better than the existing code, so that's already an improvement that is fine by me. But we could take it one step further for both functions in a later commit I think.