edit: Factor reading-related things into reader.go
edit: Cleanup
edit: Implement Key.String()