Use thimble

WIP, with some review points so it doesn't get too off-track.
Yeah, plus they're pretty much allowed to change `ALLOCATING` to whatever they want whenever they want, so...

*Really* `ALLOCATING` could be `None` too, that'd be far crazier. The totally fool-proof workaround for that, of course is:

```
_UNSET_PARTITIONER_STATE_SENTINEL = object()
```

But that is too scary-looking.