Allow model id to be set externally on creation of the widget. 

 - This depends on PR #6151. and PR #6216

With this change, the `model_id` of a widget to be set externally when creating the widget. (It is especially useful in cases where you want the `model_id` to correspond to some other object's uuid that you don't control, and you don't want to rely on a lookup table. )

Another feature is that if a widget is closed and reopened, the new model_id/comm_id will be the same as the previous one.