support circle's etc..

I refactored a bit to support the different element types without a lot of internal conditionals and switched from a `draw('rect')` api to a `draw.rect()`.