Tests: make sure function chaining move optimization is applied
With the following {call} syntax, the `unsafe` version is automatically used if the previous argument was the result of another function.

This avoids temporaries when function chaining. Also one only needs to use unsafe at the very start of the chain to have the whole chain being no-copy.

We need to test this, best way probably is to have a `when defined(test)` or `when declared(test)` in the template that increments a test global counter

```Nim
when defined(arraymancer_test):
  var move_count_asContiguous = 0
  var move_count_permute = 0


template asContiguous*[T](t: Tensor[T]{call}, layout: OrderType = rowMajor, force: bool = false): Tensor[T] =
  when declared(arraymancer_test):
     inc move_count_asContiguous

  unsafeContiguous(t, layout, force)

template permute*[T](t: Tensor[T]{call}, dims: varargs[int]): Tensor[T] =
  when defined(arraymancer_test):
     inc move_count_permute

  unsafePermute(t, dims)
```