inline the node/edge pointer vectors

Rather than using a std::vector, use a simple replacement that stores
the first few entries inline.  This reduces allocations in the common
cases (where nodes/edges have few in/outputs), at the cost of growing
the sizes of Nodes and Edges slightly (~64 bytes each).