The language has limitations that don't allow us to express the API we
actually want, and we have to resort to underscored protocols again.
<rdar://problem/20715009> Implement recursive protocol constraints
<rdar://problem/20477576> 'where' constraints on associated types in
protocols
Swift SVN r27820