In Scala, I think the right way might be to add a factory method with default arguments as well, on the singleton object (KMeans.apply). That will allow us to have a case class-like pattern. For Java, the chained `set()` naming pattern is used in both Avro and Protobuf, so I think we should go with that.

By the way, unfortunately I think it's impossible to add default arguments to the constructor and still call an argument-less version from Java. Otherwise that would've been the nicest.