Remove unserializable fields in UserCodeObjectWrapper.java

Completely change this. Add new ClosureCleaner that is based on the spark ClosureCleaner but does things a bit differently.

This one now checks whether fields it removes are actually accessed. In UserCodeObjectWrapper now throw an exception if the user code object contains non-serializable fields.

Does someone know what to do about the code-copying? Because I took this from spark.