Add save/reset, reopen config_context, = {} for contexts

save and reset are for tests, deserialization and serialization. e.g.

saved = Chef::Config.save
...
Chef::Config.restore(saved)

The hash format is a nested hash that only includes values the user has explicitly set (unless you pass true to save).

The ability to reopen config_context is new, and allows you to do

```ruby
config_context :x do
  default :y, 5
end
config_context :x do
  default :z, 5
end
```

And have both values honored.

It actually makes the code a little simpler and more memory-efficient to do this :)

Finally, using = { ... } on a config_context now works again (I think this was a regression in 2.0).  It uses restore to implement.

These are separate features, but are in the same PR because they build off each other.