cache defined tax rates

save quite a few queries
- getRates() method is called for every product with tax and the same database query may be called over and over again
- caching the query result for a particular parameter combination avoids subsequent calls.