Move drawing logic to drawers

Close #1106.
im a bit concerned here, what if `AbstractDrawer` later adds more stuff to setup? we would miss it here or be forced to duplicate. if you want to avoid calling the PathDrawer setup, one way to do it is instead `AbstractDrawer.prototype.setup.call(this)` to skip Path in the inheritance chain