By "portable", I mean we can simply copy an entire plugin package out of ICEkit to a new location, e.g. inside a project, install it from the new location, and have it work just as before, effectively forking the plugin package.
From that point on, we can make changes to the forked plugin package, e.g. to implement custom functionality that is only relevant to the one project.
Conflicts: docs/portable-apps.md icekit/blog_tools/abstract_models.py icekit/blog_tools/tests.py
* Add an `AppConfig` class. * Explicitly define `AppConfig.label`, so it won't change when moved. * Derive `AppConfig.name` from the module name, so we don't have to update it when moved. * Use `apps.get_app()` or `apps.get_model()` to import models into other apps, to avoid importing models from `icekit.plugins.image` when moved.
…#4 Add unit tests that demonstrate we cannot sort occurrences with all-day ones first as we wish, and that the overlapping filter does not return all-day events when they are created with start/end datestimes in timezones other than the system timezone.
NOTE: Only the `Timezones` tests pass after this change, further work is pending to update the rest of the system to account for the date/datetime changes to `Occurrences`.