#MAHOUT-1529 Finalize abstraction of distributed logical plans from backend operations

In the essense we do all things that are defined in MAHOUT-1529, less Stratosphere-specific tweaks. 
 
The distributed matrix api is also moved to math-scala module which doesn't have direct Spark (and Hadoop!) dependencies. 

The general api imports now look like: 

        import org.apache.mahout.math._
        import scalabindings._
        import RLikeOps._
        import drm._"
        import RLikeDrmOps._

There are a few Spark-specific operations still. (to create Spark-specific DistributedContext, and drmWrap(RDD).
There is also Spark-specific checkpoint api if needed (access "rdd" property of a checkpoint). To add these Spark-specific methods, another import is needed (from mahout-spark):

        import org.apache.mahout.sparkbindings._

Therefore, most of API classes are moved from spark to scala bindings packages. Some traits are split. There's an abstraction of DistributedContext and DistributedEngine (although user really probably only marginally cares about the context if it needs to be assigned to an implicit variable, and doesn't care about engine pretty much at all). 

All logical operators are deemed to be shared as well, and therefore are also moved to math-scala.

Engine-independent implementations of distributed QR, SSVD and PCA are also moved to math-scala.

So o.a.m.math package (in scala) has two subpackages now : "scala bindings" which is R-like bindings to mahout-math, and "drm" which is R-like bindings to distributed row matrices constructs.

I am contemplating if there's a benefit of creating just one common package, "decompositions" and put all implementations into it, whether distributed or in-core, since it now doesn't imply any additional dependencies.