Sessions: Enforce name API

This is so we can determine what child we have with just a base
pointer. Dynamic_cast doesn't work because it is possible to have a
successful dynamic cast if you cast to an intermediate parent.