AbstractWidget provided and Widget implementations updated

Goal:
* generalize widget constructions
* avoid duplicate code
* provide abstract for 3rd party widget construction