delete!(dict,key,default): return default if key isn't in dict.

Also consistently throw a KeyError in delete!(dict,key) if dict doesn't contain key and return the deleted value otherwise.

Addresses #1987.