Preparatory iprop cleanup and minor behavioral changes

The first two commits in this branch are code modernization, in order to make the forthcoming hierarchical iprop changes clearer and simpler.  The second two are minor behavioral improvements that no one is really likely to notice, but which simplify the design or make the code easier to test.