Not directly related to this PR, but it might be worth noting anyway:

A typical use-case for abstracting a Shape class is to build/use an aabb tree. For example the Shape class could have a method like: `V getBounds(V out);`. Or to do quick frustum culling like: `float getBoundingRadius();`. However, it looks like that the position is "inconsistent" among shapes. Looking at the code it appears to represent the *center* for a Circle and Ellipse shape and the *lower-left corner* for a Rectangle shape.