Breaking 🔥
* `g.edges()` now takes an optional 4th named parameter `edge` ID
Code that looks like `g.edges(some_fn, None, None, some_arg)` should now be like `g.edges(some_fn, None, None, None, some_arg)`
* Similar new optional `edge` ID parameter in `g.bind()`
Changed
* `g.hop()` now takes optional `return_as_wave_front=False`, primarily for internal use by `chain()`
Added
* `g.chain([...])` with `graphistry.ast.{n, e_forward, e_reverse, e_undirected}`