This leverages the `humanize` package to do so. Unfortunately that doesn't
seem to handle tz-aware times though, so we may need to revisit that at
some point...?
This involved a couple of ancillary changes:
* The price field renderer will not display a price for products marked not
for sale.
* The "grid" class now allows specifying a custom callable to provide
additional CSS class for table rows.
* The products grid uses this to add a "not-for-sale" class to table rows
for products which are marked thusly.