code: func (m *Module) WalkTree(cb WalkFunc) error {
  	return walkModuleTree(make([]string, 0, 1), nil, m, cb)
  }
docs: // WalkTree calls the given callback once for the receiver and then
  // once for each descendent, in an order such that parents are called
  // before their children and siblings are called in the order they
  // appear in the Children slice.
  //
  // When calling the callback, parent will be nil for the first call
  // for the receiving module, and then set to the direct parent of
  // each module for the subsequent calls.
  //
  // The path given to the callback is valid only until the callback
  // returns, after which it will be mutated and reused. Callbacks must
  // therefore copy the path slice if they wish to retain it.
  //
  // If the given callback returns an error, the walk will be aborted at
  // that point and that error returned to the caller.
  //
  // This function is not thread-safe for concurrent modifications of the
  // data structure, so it's the caller's responsibility to arrange for that
  // should it be needed.
  //
  // It is safe for a callback to modify the descendents of the "current"
  // module, including the ordering of the Children slice itself, but the
  // callback MUST NOT modify the parent module.