[SPARK-4611][MLlib] Implement the efficient vector norm

The vector norm in breeze is implemented by `activeIterator` which is known to be very slow. 
In this PR, an efficient vector norm is implemented, and with this API, `Normalizer` and 
`k-means` have big performance improvement.

Here is the benchmark against mnist8m dataset.

a) `Normalizer`
Before
DenseVector: 68.25secs
SparseVector: 17.01secs

With this PR
DenseVector: 12.71secs
SparseVector: 2.73secs

b) `k-means`
Before
DenseVector: 83.46secs
SparseVector: 61.60secs

With this PR
DenseVector: 70.04secs
SparseVector: 59.05secs

ha~ It only works if I change type from `Double` to `Int`. See the oracle doc you referenced `The Java Virtual Machine's tableswitch and lookupswitch instructions operate only on int data. Because operations on byte, char, or short values are internally promoted to int, a switch whose expression evaluates to one of those types is compiled as though it evaluated to type int.`

With 
```scala
  def fun1(p: Int) = {
    (p: @switch) match {
      case 1 => 1
      case 2 => 2
      case _ => p
    }
  }
```
I got
```
  public fun1(I)I
   L0
    LINENUMBER 147 L0
    ILOAD 1
    ISTORE 2
    ILOAD 2
    TABLESWITCH
      1: L1
      2: L2
      default: L3
   L3
    LINENUMBER 150 L3
   FRAME APPEND [I]
    ILOAD 1
    GOTO L4
   L2
    LINENUMBER 149 L2
   FRAME SAME
    ICONST_2
    GOTO L4
   L1
    LINENUMBER 148 L1
   FRAME SAME
    ICONST_1
   L4
    LINENUMBER 147 L4
   FRAME SAME1 I
    IRETURN
   L5
    LOCALVARIABLE this Lorg/apache/spark/mllib/stat/Test$; L0 L5 0
    LOCALVARIABLE p I L0 L5 1
    MAXSTACK = 1
    MAXLOCALS = 3
```