Clean and update build output more intelligently

Fixes #183.
It made more sense in my head... The idea was I needed `cleanEmittedFile` to somehow indicate in its return value whether or not an emitted file was actually deleted, and what that file was (since that information isn't known to the caller). I returned the information in a `FileDelta` because it made sense to me: there is a change in a file (the emitted output one), and it's a deletion (`Delta.REMOVED`). Returning `null` means nothing was deleted.

I needed to do something like this because `clean` (the caller of this method) needs the names of the files that were deleted in order to let the `LanguageService` know they about the deletion.

Is this a bad way to approach it?