Use smart pointers within IceCfg.
Disable most copy/assign constructors.
Improve interaction between IceOstream, ostreams, and ICE classes.
Simplify and improve type-related operations.
Change emit() and dump() signatures to take IceCfg instead of IceOstream.

This is in preparation for removing IceOstream::Cfg since the stream
may be shared across multiple concurrent translations.