Use custom serializer for aggregation messages when the data type is int/double.

This avoids using Kryo for serialization entirely when the message type is int or double. 

We can also play with variable encoding (e.g. zigzag encoding) to write the longs/ints in the shuffle serializers. But let's not do that until we have stabilized other parts of the system.