Add StringIO

This is WIP. Curious to know if I'm moving in the right direction.

TODO

- [x] fix API
- [x] write docs