test that config objects are pickleable
don't create LazyConfigValue on `__` config names

closes #4447
cleanup Config attributes

fixes pickling on Python 3

- don't override get/setattr on dunder names
- fix branching bug in __setitem__
- remove setting `__dict__` attribute
- make _is_section_key a function, not a method
update builtin test - we don't exec in config objects
remove unnecessary builtin import
reorder branches in Config.__getitem__

clearer and less duplication this way
don't report that undefined sections are present
test getattr / getitem behavior in Config

for both section and non-section keys when undefined

- get(Section) will create the section and return it
- get(not_section) will create LazyConfigValue and return it
copy values in Config.merge
don't recursively reassign config in Exporter._config_changed
fix TemplateExporter's inheritance from Exporter
Merge pull request #4470 from minrk/pickleconfig

Various Config object cleanups