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`.