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 .elm but is not found in the filesystem.

The unhelpful error is returned 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. The same 404 page is returned now for
non-existing .elm files as for other file types that are requested (a
Happstack default page).