ENH: linalg: Add an `axis` argument to linalg.norm

Example:

    In [8]: a = array([[0,1,2],[3,4,0]])

    In [9]: a
    Out[9]: 
    array([[0, 1, 2],
           [3, 4, 0]])

    In [10]: norm(a, axis=0)
    Out[10]: array([ 3.        ,  4.12310563,  2.        ])

    In [11]: norm(a, axis=1)
    Out[11]: array([ 2.23606798,  5.        ])

    In [12]: norm(a, ord=np.Inf, axis=1)
    Out[12]: array([2, 4])

`axis` can be a 2-tuple:

    In [52]: a = np.arange(8).reshape(2,2,2)

    In [53]: a
    Out[53]: 
    array([[[0, 1],
            [2, 3]],

           [[4, 5],
            [6, 7]]])

    In [54]: norm(a, axis=(1,2))
    Out[54]: array([  3.74165739,  11.22497216])

This PR also fixes a bug that occurs when computing the norm of an integer array with a negative `ord`.  Before this change, `norm([1,3], ord=-1)` returned the incorrect value 1.0.  Now,

    In [13]: norm([1,3], ord=-1)
    Out[13]: 0.75