Extract local item variable
Switch to a less repulsive for loop
Extract methods

Names are a bit generic at the moment, because it's not obvious exactly
what they do.
Reverse confusing 'unless-else' conditional
Extract methods to check properties of items
Looking at it now, decrementQuality was the wrong method name

Still need to get to the bottom of why there are two adjustments
Extract increment/decrement to methods
Extract another couple of checking methods
Collapse simple nested ifs
Combine two confusingly-similar methods I'd accidentally created
Use combination of property checks instead of specifying brie
Reverse another confusing 'unless-else' conditional
Extract method (with a bit of fiddling) to determine quality increment
Extract MAX_QUALITY constant
Check we can adjust sellIn before Quality...
...and merge the two Quality update methods
Extract strategies for SellIn adjustment
Extract Quality adjustment strategy

First step: just a single strategy, with all the checks inside its run()
method.

NB. Had to temporarily duplicate the isLEgendary() method.
Just realised there's nothing in the rules to stop us subclassing Item
...but it didn't really help

I'm assuming we aren't allowed to change the type of the items field, so
I don't think we can call additional methods on the subclasses when the
list is declared as List<Item>.

Stupid static type-checking.

This reverts commit 113d8eec960192657c90857c4b8d48cd752f0283.