[SPARK-4124] [MLlib] [PySpark] simplify serialization in MLlib Python API

Create several helper functions to call MLlib Java API, convert the arguments to Java type and convert return value to Python object automatically, this simplify serialization in MLlib Python API very much.

After this, the MLlib Python API does not need to deal with serialization details anymore, it's easier to add new API.

cc @mengxr
I feel the logic here is a little confusing because it will go through the args and try caching if possible. It may be clearer if we provide `_cache_serialized` method and use it within each method wrapper, e.g.:

~~~
model = callAPI("trainKMeansModel", _cache_serialized(rdd.map(_convert_to_vector)), k,
    maxIterations, runs, initializationMode)
~~~