More stuff for the common jar

re: abstract class, I am aware, but we still need a way to expose setFields('...'), otherwise we won't ever be able to use it :)

we shouldn't make the client responsible for wrapping the iterator into iterable/stream - we should push that into this common code too