Handle 403 Error on browser image upload

The system wasn't able to handle 403 responses without displaying an
error to the user. The problem was that it would look like a success
event. This commit fixes that problem by saving the error function as a
property of the promise returned from the upload service. The success
function then treats any status other than a 204 as an error and calls
that error function. This preserves the api of the promise being
returned by the upload service.