Fixed the differencing of images for the webagg/nbagg backends.

In #3552 I improved the ability to handle images with transparency in the webagg/nbagg backends. Unfortunately, in doing so, I managed to break the differencing mode by always clearing the existing image on the javascript side. This change fixes the issue by keeping track of the image mode in the backend and notifying the client of any changes (as a result of transparency appearing).
throw in a `mode = mode.lower()` to make it a bit more forgiving?