Make the widget property_lock store the JSON state, not the original object

Comparison between arbitrary python objects can get crazy, whereas we really
only care about if the JSON state we are syncing is different.  So with this change,
we store and check against the JSON state.
allow slash in root->tree redirect

before #6117, only `/base_url/` worked,
after #6117, only `/base_url worked,
after this PR, both should work.
improve indicators and handling of dead kernels and broken websocket connections

I think it's still possible to get to a state with no kernel and insufficient indication.
Imperfect, but an improvement.
Merge pull request #6333 from minrk/tree-slash-redirect

allow slash in root->tree redirect
Add env to the kernelspec __init__

the env attribute was added to the kernelspec and the kernel.json file, but has an error when you try to use it because it's not in __init__
Merge pull request #6171 from tarzzz/slider-value-validate

Validate slider value, when limits change
Merge pull request #6194 from SylvainCorlay/immediate-widget-comm

Allow model id to be set externally on creation of the widget.
Support both value tuple and upper, lower traits for both int and float widgets
Add a number of extra tests for the range widgets
Merge master
Remove a rogue print statement
Remove kernel spec __init__ completely

Thanks to @minrk for the code suggestion.
Fix typo in deprecated class name.
s/that/this bug
Add .NET implementation of check_pid
Catch InvalidOperationException as well
Merge pull request #6338 from aminb/cli-check_pid

Add .NET implementation of check_pid
Merge pull request #6125 from jdfreder/flex

Embrace the flexible box model in the widgets
Merge pull request #6331 from jasongrout/traitlet-metadata-default

Add an optional `default` argument to trait metadata get, like the Python dict's .get() default argument
Merge pull request #6335 from jasongrout/patch-7

Add env to the kernelspec __init__