Handle IPNetwork/IPRange efficiently in IPSet.update()
Use faster compaction algorithm in IPSet.add()

When only a single IPNetwork is added to an already-compacted IPSet,
re-compaction can be done much faster than in the general case.
Remove redundant self.compact() in IPSet.union()

The ip_set.update(...) already does a self.compact() at the end. No need
to do it again.
Improve performance of IPNetwork.__contains__
Improve performance of IPNetwork.sort_key()
Improve performance of IPSet.remove()