hide union, mldivide, envelope, volume, extreme, projection and helper functions

new: Polytope.envelope
new: convexPolytope.extreme
rename: method project -> projection, in the style of builtin set
update qhull to return a Polytope, instead of ConvexPolytope
copy computationally expensive attributes of ConvexPolytope and Polytope
new: ConvexPolytope.reduce, update _reduce function,

and replace its usage wherever possible with method call instead.
rename ConvexPolytope.extreme -> .vertices
update calls to hidden functions
store envelope to avoid recomputing it
modify instance within class methods, not from within function _extreme