Alternative chains

After the discussion on PR #4, I came up with this alternate design.

What do you think ?

It was simpler than expected to re-implement play().

I'm not sure how this compares performance-wise. I'm using a HashMap instead of a Vec, so this should be slower, but on the upside I don't store redundant information as much anymore.