replaced toOStream() with direct operator<< overriding
less boilerplate and improved consistency are good things