Empty file should not be treated as missing

An empty file (i.e., file contents == "") was being treated as missing when trying to
compile it. This is undesirable, and should not cause an error at all, as the empty string
is a valid Roy program. The cause of this was the empty string being interpreted as falsy
in `if(!source)`.

This patch refactors the getFileContents function to fix this. It also tidies a few things,
e.g. removing unused variables.