move reduce implementations to Reducible
make Smap iterable