[SPARK-1672][MLLIB] Separate user and product partitioning in ALS 

Some clean up work following #593.

1. Allow to set different number user blocks and number product blocks in `ALS`.
2. Update `MovieLensALS` to reflect the change.
Does `private[this]` make sense at the top level? Shouldn't it be `private[recommendation]` or something like that?