Fixed #23670 -- Prevented partial import state during module autodiscovery

Thanks kostko for the report.
Fixed #23715 -- Prevented urlize from treating a trailing ! as part of an URL

Thanks to 57even for the report.
Fixed #23738 -- Allowed migrating from NULL to NOT NULL with the same default value

Thanks to Andrey Antukh for the report.
Added a warning about direct settings manipulation in tests.

Thanks Thomas Chaumeny for the initial patch.
Fixed #23732 -- Corrected and enhanced select_related() docs.

Thanks Daniele Procida for the report and review.
Renamed SpatiaLite feature flag introduced in refs #23152.

Thanks Doug Goldstein for the suggestion.
Fixed #23468 -- Added checks for duplicate fixtures directories in loaddata.

If settings.FIXTURE_DIRS contains duplicates or a default fixture
directory (app_name/fixtures), ImproperlyConfigured is raised.

Thanks to Berker Peksag and Tim Graham for review.
Fixed #23731 -- Fixed migrations crash when adding blank GeometryFields on PostGIS.

Thanks raratiru for the report and Claude Paroz for review.
Fixed #23744 -- Fixed typo in selenium testing example.

Thanks djbug for the report.
Fixed #23376 -- Made documentation about required Storage methods
consistent.

The following methods **should** be implemented, but are not required:

 * Storage.delete()
 * Storage.exists()
 * Storage.listdir()
 * Storage.size()
 * Storage.url()

Updated documentation to reflect this fact and give a couple of examples
where some methods may not be implemented. Add a warning that not
implementing some methods will result in a partial (possibly broken)
interface.

Ticket: https://code.djangoproject.com/ticket/23376
Merge pull request #3459 from brwr/brwr/django-23376

Fixed #23376 -- Make documentation about required Storage methods consistent.