graphcycles: extract NodeIO out of Node
graphcycles: extract NodeIO out of Node

To improve cache locality when doing DFS.

name                          old time/op  new time/op  delta
BM_StressTest/2048             492ns ± 2%   470ns ± 1%   -4.38%  (p=0.008 n=5+5)
BM_StressTest/4096             499ns ± 2%   478ns ± 1%   -4.07%  (p=0.008 n=5+5)
BM_StressTest/32768            512ns ± 2%   494ns ± 1%   -3.52%  (p=0.016 n=5+4)
BM_StressTest/262144           558ns ± 2%   537ns ± 1%   -3.77%  (p=0.016 n=5+4)
BM_StressTest/1048576          621ns ± 2%   692ns ±23%     ~     (p=0.690 n=5+5)
BM_ContractEdge/1000           104ns ± 2%   106ns ± 5%     ~     (p=0.286 n=5+4)
BM_ContractEdge/10000          119ns ± 2%   119ns ± 1%     ~     (p=0.651 n=5+5)
BM_IsReachableNonConst/10     9.76ns ±10%  9.17ns ±12%     ~     (p=0.095 n=5+5)
BM_IsReachableNonConst/50     15.4ns ±11%  13.6ns ± 5%  -11.41%  (p=0.032 n=5+5)
BM_IsReachableNonConst/100    17.5ns ±13%  15.3ns ± 7%  -12.66%  (p=0.032 n=5+5)
BM_IsReachableNonConst/200    20.1ns ± 7%  18.1ns ± 9%   -9.71%  (p=0.016 n=5+5)
BM_IsReachableNonConst/1000   25.5ns ± 5%  22.7ns ± 3%  -10.98%  (p=0.008 n=5+5)
BM_IsReachableNonConst/30000  45.0ns ± 3%  39.2ns ± 3%  -12.95%  (p=0.008 n=5+5)
