improve isArray; add isNodeList, and include node lists in isList
make map and asyncMap generate an object if initially given an object (rather than always generating an array