Improve error messages when elm input file or binary can't be found

When the elm binary can't be found or the requested file ends in .elm but the
file does not exist the server returns the following unhelpful message:

    Server error: elm-server-cache: getDirectoryContents: does not exist (No such file or directory)

The server also previously returns a 400 error instead of a 404 when the
requested file ends in 404 but is not found.

This error occurs because the server tries to call removeDirectoryRecursive
on a directory that doesn't exist. This commit adds a check to make sure the
directory exists before removing it, and it also adds a case to check if the
error code is 127. I added this case because there is no useful stderr nor
stdout in this case, so it seems better to return a custom message since we
know the cause of the 127 code.

This commit also fixes the error code to be a 404 when the file ends in .elm
but does not exist on the filesystem.