Added the ability to weaken a belief

model.weaken(s) returns a copy of model, but with Vinv() scaled by s
(with s in (0,1]).  This is particularly useful when wanting to
deliberately weaken a prior.

Also split `update()` into `update() const &` and `update() &&`, with
the latter returning std::move(*this), and the former simply invoking
the latter by returning `Linear(*this).update(y,X)`.  This split allows
the latter to be invoked directly (and thus hopefully performing a bit
better) when calling something like: `model.weaken(0.9).update(y,X)`.

This commit also adds an extra, optional `prior_weight` argument to
the Demand, Quality, etc. beliefs that, when not equal to the default
(1), updates using a weakened prior.