[FLINK-1245] Introduce TypeHints for Java API operators

This PR contains:

- .returns(String), .returns(TypeInformation), .returns(Class) for all Java API UdfOperators
- a new UnknownTypeInfo with a corresponding new UnknownTypeSerializer which uses Kryo in a special configuration
- the TypeExtractor does not throw Exceptions anymore if it recognizes type erasure, 
  instead it prints log warnings and returns a UnknownTypeInfo
- Java 8 Lambdas can now be compiled and run with Oracle JDK for development (not efficient due to UnknownTypeInfo)
- since TypeInfoParser is now "Public API" I reworked it such it also support Pojos
- Unit Tests test TypeHints, Serializers, TypeExtractor and Lambdas
Okay, that makes sense.

How about we add a flag to make sure that the `fillInTypeInfo()` cannot be called after the `getType()` method was called? That way we make sure that we do not make things inconsistent (by returning some type info at some point, and another one later). This should not happen anyways, but I would feel much better with this sanity check in place - after all, this can cause very hard to debug issues, if used inconsistently.