PARTIAL: massive refactoring of SVGRectElement and friends, to fix some very old bugs that had us non-compliant with the SVG Spec. This commit is NOT FULLY WORKING - a few test shapes are slighlty wrong (e.g. the text shapes) - it appears that a transform somewhere is missing. NB: all SVG elements that are transformable now MUST declare and implement the SVGTransformable protocol, or their transforms will be ignored (this is as per the SVG Spec)