Fixed a regression in `datalist.teardown()` that would halt the op, added a minor optimization to `datalist.refresh()` to avoid ops that would result in nothing, fixed `data.batch()` to always refresh a datalist