document and fragment allow conditionals and nested arrays of filter&transformer pairs
ffns is private
Use flatten-all and ifn? in ffns and improve docstring. Rename to flatten-fns.

flatten-all is just like flatten but also flattens maps. It is unnecessary to
use it here since we shouldn't ever have maps in there, but I hate that
clojure.core/flatten is incomplete, so I prefer to use it over flatten
everywhere. The change to ifn? is useful because fn? checks for an actual
concrete fn, whereas ifn? checks for anything that implements the fn interface
and this can be called as a function (you can see the difference if you call
them both on a map {} which is a function, but not a concrete (fn ..)).
Fix indentation and formatting of the added test.