refactor(categoryTreeResolver): introduce abstraction

The `CategoryTreeResolver` abstraction allows us to
swap our the strategy how the category tree is resolved.
It could be more sophisticated but this simple change
should get us quite far for now.
chore(*): release 0.5.0