added offseting for polyline, need to break up shapes.py
initial stab at joinery, will likely totally redo
joinery parent and zipper children