More performance and features for "in" operator

- Improve performance of __contains__ by doing less function calls.
- IPRange gets its own __contains__ that is faster than the generic
  implementation of IPListMixin.
- __contains__ now also accepts anything that can be converted to an
  IPAddress. E.g. ' "10.0.0.42" in IPNetwork("10.0.0.0/24") ' works now.
Better performance for various set operations

- Reimplement issuperset() and issubset() with simpler, yet faster,
  algorithm.
- For intersection(), symmetric_difference(), and difference(), skip the
  call to IPSet.compact() since it will never change anything.
- Do not convert iterable to list before iterating.
Faster sort_key() method for IPNetwork, IPRange