More refactors and small optimizations
CSV parser can parse from String or IO, and can iterate each row