Allow runtime settings overrides
Summary
This builds on #62 to introduce support for Django settings being overridden at runtime. While true changes to settings at runtime are not supported, this aims to simplify testing (django.test.override_settings should now work) and allow for settings architectures which do not pin down settings values immediately.
Consumers must ensure that settings do not change once the system has started however as this could lead to unpredictable behaviours in response. (For example it is possible that queues could have incorrect numbers of workers assigned)
I've rebased this on top of #66 so the tests that introduces help validate that extra-config loading works as expected and updated those tests to work with this new approach.
Code review
I suggest starting with the changes to app_settings.py, then looking at utils.py and test_extra_config.py.
The remainder of the changes are small adaptations to account for the slightly changed internal API and moving tests to use override_settings now that works.