Better support arbitrary concrete object printing

These commits introduce an ability to print an arbitrary concrete object, so long as a mapping function is defined for that object. Currently only TokenLattice and Communication objects are supported.