FEAT: New optional feature serde-1, serialization for Graph, StableGraph

- Implement serde serialization for Graph, StableGraph

  - Both graphs use the same representation; we can always convert Graph
    -> StableGraph but only the other way if it has no holes.

  - The graphs use a manual serialization method so that we encode
    graphs portably and without redundant information. Supports both
    bincode style and json style (self describing) serialization.

  - We use serde deriving as far as possible, but via intermediate data
    structures that we create during de/serialization. This is done to
    reach all the goals of portable serialization and additionally,
    avoiding excess copying or reallocation. Serialization is zero
    allocation.

- Other graphs can learn serialization down the line. Gettin Graph
  & StableGraph finished was the major milestone needed.

- Depend on itertools 0.6.2 for some utilities we were copying anyway
14 files changed