rm comparisons of ConvexPolytope

because they involve set differences, which do not necessarily return ConvexPolytopes.
This enforces as the main object of computation Polytope (even though calling _mldivide is in principle possible, it doesn't avoid anything, because a Polytope would instead be converted deeper in the call tree).
fix typo: _cheby is a property, not a method any more
fix typo: rm extra arg from qhull
update property name: extreme -> vertices
set Polytope._vertices in hull directly,

then return a singleton Polytope
recurse only when needed in _mldivide

and improve type checking using assertions, to ensure overhaul works corrently
rewrite _union to:

- operate only on Polytopes
- be pythonic, and
- use simpler var names.
avoid mutable default args
add keyword args A, b and allow mixing ConvexPolytopes with (A, b) tuples in Polytope.__init__

so that:

- a singleton Polytope can be directly defined using the keyword args A and b, w/o the need to first instantiate a ConvexPolytope, and
- a Polytope can be defined by passing a list whose each item is either:
    - a ConvexPolytope, or
    - a tuple (A, b),
  (mixing the above two is allowed)
misc typos
make matplotlib optional in example
update accessing vertices of singleton Polytope in example