Recurse to find the base, *then* get the field.

We had been trying to recurse on the field rather than the base, and our unit test was insufficiently type-aware to catch this.

Fix the behaviour and beef up the unit test.