Added bounds#squares method which returns all possible square bounding boxes
RingChain now looks for the mimimum bounding box when constructing from non square patterns
Extracted outer ring's rotation and reflection to containing RingChain
Extracted reflection and rotation into ring chain group and added to hashes
Added depth limit to graph (untested)
WIP: Attempting to add degrees of freedom to rotation and reflection to ensure minimum values are maintained
Using transformation map rather than degrees of freedom for minimal encoding of symmetric shapes