This changes the way serializer/deserializer are selected by the framework.
The new scheme requires the app dev to register serializers/deserializers for types using API. The framework infers the type of data from topology and uses appropriate serializer/deserializer. This is best effort. Type inference is not always possible due to Java's type erasure. If a type cannot be determined, a user code can supply more information.