Merge pull request #1404 from 9rnsr/fix7252

Issue 7252 - ICE(template.c): 'global.errors' on line 4893 in file 'template.c'
Remove old rvalue-ref completely
Remove current auto ref with template function
Implement `auto ref` that can receive both lvalue and rvalue, even if the function is template or not.

For rvalue argument, compiler will assign it to a temporary variable, and get its reference.

Then opEquals in struct should have the signature:
`bool opEquals(const auto ref typeof(this) rhs) const;`
instead of:
`bool opEquals(const ref typeof(this) rhs) const;`

For the mangling, `auto ref` is encoded to `KK`.