Return "auto" where appropriate

This ought to be enough to allow VexCL and Eigen to return expression templates and thereby do kernel fusion across function boundaries, while still preventing valarray from doing the same and segfaulting on us when the expression templates turn out to be carrying references to temporaries.

Eventually I hope to get a patch in gcc making their valarray templates more robust and we'll want an #ifdef ANTIOCH_SAFE_VALARRAY_AUTO sort of configure-test-based case to reenable that.

I break the raw_type API here a bit to make the metaprogramming look cleaner; hopefully nobody's using that externally yet.