Both Things and OmniFocus will meet most of your requirements. And you're also right to point out that none of the other options out there come close to meeting your needs. I've been down that path as well and although there are other well-made todo apps, none of them come close to the feature sets of OmniFocus and Things.
The trade-off between these two apps is mainly one between simplicity and power. I used to use OmniFocus back when I worked 60-hour weeks as a management consultant, and I appreciated its powerful features. In my new, less complicated life as an indie developer, I don't need quite as much functionality in a todo list app so I've preferred the simplicity of Things.
They're both great apps, and it's a matter of personal taste and needs, so the best thing for you to do would be to take each one for a 30-day spin.
To address your requirements in more detail:
- each task should have a review date, when it comes to the top of my list so that I can decide when to start doing it (or postponing it for
later)
Both apps allow you to schedule tasks to start in the future, so that they don't clutter up your list until they become relevant, and once they show up at the scheduled time you can reschedule them again.
- I want an easy way to enter dates like "tomorrow" or "in 3 days" or on 23rd (of this month), etc.
Slight edge to OmniFocus here. In OmniFocus, in any situation where you can create a task, you can hit tab a couple of times and type in a start date in any of the formats you describe.
In Things you would have to bring up a rescheduling window with ⌘R then either pick a date on the calendar with the mouse, or type in a number and choose the units (days, weeks, months, etc.) from a drop-down (which does work with the keyboard, e.g., 'y' for years). Gets the job done, but slightly more cumbersome.
- I want to create filtered task lists (with complex criteria)
OmniFocus allows you to organize tasks into projects and contexts (which are like folders, so a task can only be in one context). It allows you to create customized views called Perspectives, which let you filter tasks based on any combination of project, context, start date, due date, and other attributes.
Things lets you organize tasks into projects and tags. Tags, unlike contexts, aren't mutually exclusive, so you can give a task as many tags as you want. It doesn't give you too many ways to filter: there are pre-existing views for the tasks that you want to do today, tasks that are currently available for you to do ("Next"), tasks you want to do Someday, scheduled tasks, and each of your projects. Within each of these views you can filter by tag.
- I want to store reference material for each project in a separate directory (maybe managed by DevonThink Pro Office) which should be
accessible quickly from the task/project
In both apps there is a notes section to each task, and in addition to text you can also drag any file from the filesystem to store a link to it.
- each project should have a review date so that I know when to have a look at it next time for not forgetting it
I'm not quite sure what you mean here. If you simply want to have a project that starts on some date in the future, OmniFocus can do that. Things technically can't, but you could just set up all the tasks to start on that date, and then you'd first see those tasks on that day.
In addition, I've never used this myself, but OmniFocus has powerful Review functionality that lets you set a date or frequency when a project needs to be reviewed, and also lets you set up custom perspectives for actually reviewing your projects and tasks.
- it would be nice to also create dependencies like "task c will become active automatically when task a is done"
For any project, OmniFocus lets you set whether the tasks in it have to be done sequentially (in which case only the first one will be available for you to do) or in parallel. Even better, you can split any of the tasks in a project into sub-tasks, which can also be sequential or parallel, independently of the overraching project. So you can account for any kind of system of task dependencies. As of now, Things doesn't do this: all projects are just a flat, ordered list of tasks.
Finally, you mentioned that syncing isn't important, but I'll note that the Mac, iPad, and iPhone versions of OmniFocus all sync very well over the air. OTA sync for Things is currently in beta, but it's pretty easy to get into the beta. And it works great as well.