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.

I compiled this module with `-unittest -debug`, and saw a lot of
```
'std.utf.validate!(...).validate' is not nothrow
```
errors. It seems that debug statement doesn't ignore nothrow.