func TransformFrom(root Node, startFrom []string, transformFn TransformFunc) (interface{}, error) {
	start := GetPathCmp(root, startFrom)
	if start == nil {
		return nil, errors.New("no descendant at " + path.Join(startFrom...))
	}
	return transform(root, start, startFrom, transformFn)
}
TransformFrom is just like Transform, but starts the Walk at given startFrom
sub-node.
package ipld
import (
	"errors"
	"strconv"
	"path"
)
type TransformFunc func(root, curr Node, path []string, err error) (Node, error)
func Transform(root Node, transformFn TransformFunc) (Node, error) {
	n, err := transform(root, root, nil, transformFn)
	if node, ok := n.(Node); ok {
		return node, err
	} else {
		return nil, err
	}
}