split widgets into separate files

built on top of #13 

fixes #17