def subgraph(included = nil, &selector)
      result = clone
      result.select_vertices!(included) unless included.nil?
      result.select_vertices!(&selector) if block_given?
      result
    end
def subgraph(included = nil, &selector)
      result = clone
      result.select_vertices!(included) unless included.nil?
      result.select_vertices!(&selector) if block_given?
      result
    end
Initialize a new graph, optionally preloading it with vertices and edges

 Graph.new() => Graph
 Graph.new(mixins: [MixinModule, ...], ...) => Graph

 +mixins+ is an array of modules that can be mixed into the various
 classes that makes up a graph. Initialization of a Graph, Vertex or Edge
 looks for submodules in each mixin, with the same name and extends
 any created object. Defaults to [Tangle::Mixin::Connectedness].

 Any subclass of Graph should also subclass Edge to manage its unique
 constraints.

 Return a subgraph, optionally filtered by a vertex selector block

 subgraph => Graph
 subgraph { |vertex| ... } => Graph

 Unless a selector is provided, the subgraph contains the entire graph.