Handle exceptions thrown in done handles attached to ProjectManager.getAllFiles

`ProjectManager.getAllFiles` currently returns a new promise to each caller, but if one of the callers attaches a done handler to its promise that throws an exception then no further done handlers attached to later promises returned from `getAllFiles` are executed. This is because jQuery promises are dumb.

Addresses #6401.

CC @redmunds