Lots of refactoring in the demand analyser

The main change here is to factor the strictness domain in the
same way as the usage domain

It took me ALL DAY because I found I had to really dig into
the code, and it's not easy stuff!  But I think it's looking
much better now.