BangBang support

If the package BangBang.jl is loaded, then the functions push, pop and delete for SmallDict, SmallSet and SmallBitSet, union, intersect, setdiff and symdiff for SmallSet and SmallBitSet as well as setindex, push, pushfirst, pop, popfirst, deleteat and append for AbstractSmallVector as well as PackedVector are also available in !!-form. For example, setindex!! with a SmallVector as first argument calls setindex. (BangBang.jl does not define insert!!, prepend!!, filter!! and map!!.) Moreover, add!!(v, w) is a synonym for v+w for the immutable vector types defined by this package.

This allows to write efficient code that works for both mutable and immutable arguments. For example, the function

f!!(v, ws...) = foldl(add!!, ws; init = v)

adds up its arguments, mutating the first argument v if possible.