Support for List and Map

Again, I suggest moving this logic into `generateElementReadCode`, and again, what happens if reading in `Option[Option[String]]`?