Renamed 'poly*' variables to 'shape*' which is clearer, and also fixed some of the projection logic.
Added _min and _max properties to the shape class, and fleshed out the 'project_onto' method a bit more.