Add lvalue/rvalue traits

* add `isLvalue`
* add `rvalueOf`/`lvalueOf`
Use `std.traits.{rvalueOf,lvalueOf}` in `std.traits.hasElaborateAssign`.
Fix `std.traits.hasElaborate*` docs for static arrays.
Document compiler-generated `opAssign` for `std.traits.hasElaborateAssign`.

* also add unittests