Widget persistence API

Instead of persisting widgets ourselves, this PR provides the tools to allow users to persist widget states however they want.

This PR also includes some bugfixes, one of which is the removal of views on cell re-execution!!!
Based on #6664 

- [x] Try it
- [x] Include examples

@ellisonbg @SylvainCorlay @jasongrout 
I'm inclined to agree with you.  I'd like to find a more flexible way to deal with things (some way that would let views be outside of the widget area), so I'll keep thinking of a nice way to do that.  For now, I'll support removing the widget.show method.  i do agree that the logic belongs in the cell, not the widget.