chain; flatten revisited; "of"

torn on this one. I usually think of `flatten` as fully recursive. which is how we had it defined. but `flattenShallow` always seemed clunky. nonetheless, i kept it as an alias.

when defining chain, `flat(map(fn, list))` just looked so nice. not married to `flat`, but don't see it as awful either