code: public static <GeneralVisitor extends Visitor> GeneralVisitor visit( Visitable visitable,
                                                                           GeneralVisitor visitor ) {
          if (visitable != null) visitable.accept(visitor);
          return visitor;
      }
docs: Visit the supplied {@link Visitable object} using the supplied {@link Visitor}, which must be responsible for navigation as
  well as any business logic.
  
  @param <GeneralVisitor> the type of visitor
  @param visitable the top-level object to be visited
  @param visitor the visitor that is to be used
  @return the visitor, allowing the caller to easily invoke operations on the visitor after visitation has completed