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.

Sounds like a compiler bug?
In any case, this makes me think that maybe it's better if we just don't put any attributes on this function, since it *is* a template function and the compiler will infer attributes automatically.