example 3 breaks with Nim >= 1.6
I've tested the example https://github.com/mratsim/Arraymancer/blob/master/examples/ex03_simple_two_layers.nim with various Nim versions. 1.4 branch seems ok, but 1.6 branch and devel breaks:

/Users/salient/.nimble/pkgs/arraymancer-0.7.6/arraymancer/nn/layers/linear.nim(57, 18) Error: type mismatch: got <string, LinearGate[Tensor[system.float32]], proc (self: LinearGate[Tensor[system.float32]], payload: Payload[Tensor[system.float32]]): SmallDiffs[Tensor[system.float32]]{.gcsafe, locks: 0.}, Variable[Tensor[system.float32]], Variable[Tensor[system.float32]], Variable[Tensor[system.float32]], Variable[Tensor[system.float32]]>
but expected one of:
func register_node[TT](name: static string; gate: Gate[TT];
                       backward: Backward[TT];
                       result: Variable[TT] or seq[Variable[TT]];
                       parents: varargs[Variable[TT]])
  first type mismatch at position: 3
  required type for backward: Backward[register_node.TT]
  but expression 'linear_backward_ag' is of type: proc (self: LinearGate[Tensor[system.float32]], payload: Payload[Tensor[system.float32]]): SmallDiffs[Tensor[system.float32]]{.gcsafe, locks: 0.}

expression: register_node("Linear", gate, linear_backward_ag, result, input, weight, bias)

