Fix Issue 13157 - Enable unaliased construction and conversion for std.typecons.Unique

https://issues.dlang.org/show_bug.cgi?id=13157

* Enable 'safer' construction of the unique resource without aliases, by wrapping the resource constructor. This is done with a factory function `unique!T()` to support calling a class constructor without arguments.
* Enable transferring `Unique!Derived` rvalue to `Unique!Base`.
* Document `isEmpty`.

This mainly updates old code that was disabled with newer language developments.
This assumes that `T` is default-constructible. Use a private constructor to do the initialization instead:

```d
return typeof(return)(new T(args)); // Supply a private constructor `this(T p)`
```

Making it the last call in the function should always make it a move, thus avoid problems with non-copyable `T`'s.