Use topological sort for migration operation dependency resolution

rather than an ad-hoc algorithm
Merge pull request #3525 from vanschelven/master

Use topological sort for migration operation dependency resolution
Merge pull request #3516 from jaylett/filestorage-timezones

Fixed #23827 -- TZ behavior in Storage API ref doc
Fixed #14030 -- Allowed annotations to accept all expressions
Fixed #23832 -- timezone aware Storage API.

Added an `aware` parameter to the relevant Storage methods, with
False/None returning naive objects, True returning aware objects,
and None (the default) deprecated for 2.0, allowing a transition
to a future where we only return aware objects (or at least we
return aware objects by default).