Refactor recordio.record

- Provide an interface for record so the client can provide its own implementation.
- Add documentation to the exposed symbols in recordio.record
- Change Appender and Fetcher to use the new interface