[RFC] 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.

Addresses #1987.