Example [here](https://github.com/mratsim/Arraymancer/blob/master/src/tensor/higher_order.nim#L190)
GC types mess up OpenMP, so I need 2 versions of each higher-order functions:
with no-GC allocation and with GC allocation in the end result (and no OpenMp)
proc map2*[T, U; V: not (ref|string|seq)](t1: Tensor[T],
f: (T,U) -> V,
t2: Tensor[U]): Tensor[V] =
