Defer getting file contents until needed

This will avoid calling the API to get file contents from GitHub as the
`CommitFile` object is constructed. Also, allows us to avoid getting contents if
file is removed.
Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.