Move drawing logic to drawers

Close #1106.
imo tslint should be responsible for this stuff... lets stop dinging on CRs for whitespace, tslint is source of truth on what is acceptable whitespace code style for missing whitespace. @bluong if you want this to be enforced figure out why tslint isnt enforcing