Add Cache-Control header with max-age directive in the service layer

Extended model to contain stock level. max-age is calculated as a function of this, so
that if an item sells out.

(Note that since this is just a demo nothing actually sells out.)
Made accurate stock levels private

We do this by introducing "public" versions of the model objects
that don't reveal too much information.