Export `cumsum` procedure and expand to work on n-dim Tensors
I have three suggestions: 

1. Export `cumsum` procedure: 
 https://github.com/mratsim/Arraymancer/blob/1a2422a1e150a9794bfaa28c62ed73e3c7c41e47/src/arraymancer/ml/clustering/kmeans.nim#L26
```nim
proc cumsum[T: SomeFloat](p: Tensor[T]): Tensor[T] {.noInit.} =
  ## Calculates the cumulative sum of a vector.
  ## Inputs:
  ##  - p: a rank-1 tensor to cumulatively sum
  ##
  ## TODO: implement parallel prefix sum
  ## See: https://en.wikipedia.org/wiki/Prefix_sum#Algorithm_2:_Work-efficient
  ##
  ## Returns:
  ##  - A tensor cumulatively summed, that is, add each value to
  ##    all previous values, sequentially
  result = p.clone()
  assert p.rank == 1
  assert p.shape[1] == 0
  let n_rows = p.shape[0]
  for i in 1..<n_rows:
    result[i] += result[i-1]
```

2. Generalize this procedure to work on n-dimensional Tensors.

3. Create a procedure to do cumulative product `cumprod` that is similar to `cumsum`, but instead of sum, use prod. 



