Use the element access operator in the Tensor classes

This is the first step to making a lot of the tensor operations more general. If element access operator is used, rather than raw access to ```_vals``` all these methods can be used in a symmetry aware version of the Tensor classes (by making ```operator()``` virtual). Adresses #4183.