[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
I think we need to be a bit better with the error message. This basically says "didn't work, go figure it out". Directing to the log is not quite as good as giving the right error message a the right place.

In a prior version, the code had a "MissingTypeInfo". I think that was good because that missing type info can hold:
  - The operator (name) where the return type was not determined
  - And the reason for the failure (the exception from the type extractor)

Instead of directing the user to the log, we can throw an exception and in that exception describe exactly which operation it was, what the cause was, and we can chain the original exception.