Function takes arbitrary data structure as a form argument and returns
reducible tree, that can be walked via reduce. Since such trees are reducible
that also makes them filter-able, map-able etc... Basically all the
reducer functions can be used. To define a tree structure for
navigation two other arguments need to be supplied:

isBranch predicate function that is invoked on every node and is supposed
to return true if node is branch or false otherwise.

nodes function invoked on every branch node (nodes to which isBranch
returns true) and is expected to return reducible collection of the
child nodes.

Please note that tree won't attempt to normalize order of child nodes during
recursively walk. More simply if results of nodes function are eventual
collections like Stream that emit data asynchronously order of nodes being
walked will depend on order in which those nodes arrive. If sequential walk
order is desired but underlying data structures are asynchronous it's up to
consumer to sequentialize form before passing it to tree.

var tree =require("tree-reduce")

var filter =require("reducers/filter")

var map =require("reducers/map")

functionisObject(value){return value &&typeof(value)==="object"}

functionvalues(dictionary){

returnObject.keys(dictionary).map(function(key){

return dictionary[key]

})

}

// Make reducible AST tree of the source. If node is an object than it's