``np.kron`` now maintains subclass information
----------------------------------------------
``np.kron`` maintains subclass information now such as masked arrays
while computing the Kronecker product of the inputs

.. code-block:: python

    >>> x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
    >>> np.kron(x,x)
    masked_array(
      data=[[1, --, --, --],
            [--, 4, --, --],
            [--, --, 4, --],
            [--, --, --, 16]],
      mask=[[False,  True,  True,  True],
            [ True, False,  True,  True],
            [ True,  True, False,  True],
            [ True,  True,  True, False]],
      fill_value=999999)

.. warning::
    ``np.kron`` output now follows ``ufunc`` ordering (``multiply``)
    to determine the output class type

    .. code-block:: python

        >>> class myarr(np.ndarray):
        >>>    __array_priority__ = -1
        >>> a = np.ones([2, 2])
        >>> ma = myarray(a.shape, a.dtype, a.data)
        >>> type(np.kron(a, ma)) == np.ndarray
        False # Before it was True
        >>> type(np.kron(a, ma)) == myarr
        True
