Backend improvements
This issue contains a list of improvements for our backend (Python):

- [x] General refactor, make it easier to add new features, do something with constantly growing `utils.py` files and others, possibly by splitting it into separate apps. Create more utilities
- [x] Either switch to sqlalchemy 1.4/2.0 or create model-level utilities for managing many-to-many relationships and others, to avoid repetitions and bugs
- [x] Clearly separate different stages: models (database), validators (sync checks), async checks of the data, and the actual views
- [x] <strike> Probably squash alembic migrations into one</strike> Not required and might cause issues upgrading from old versions
- [x] Use unique non-int ids for objects (i.e. `secrets.token_urlsafe()`) (see #221)
- [x] Add functional testing of the invoice processing functions (just like in SDK, set up regtest network and test that payments are detected correctly) (see #226)
- [x] Test IPNs sending (#226)
- [x] Test other hard-to-test things in functional testing
- [x] Test SDK in all python versions instead of one
- [x] Add CI cache everywhere where possible
- [x] Improve contributing guidelines and document code more
- [x] Improve search, add ability to search by special fields, or to search all objects created in the last 7 days/day/month, custom filters support in search directly (for example, filter invoices by store)
- [x] Fix worker timeouts (#158)
- [x] <strike>Plugins support, see #242 </strike>