BUG: Panel.apply (2d) doesn't work when function returns a scalar of NumPy datatype in 0.16.1
Panel.apply (2d) doesn't work when function returns a scalar of NumPy datatype in 0.16.1.

test code is as follows:

```
import pandas
import numpy

panel = pandas.Panel(numpy.random.randn(5, 5, 5))

panel.apply(lambda df: 0, axis=[1, 2]) # OK

panel.apply(lambda df: 0.0, axis=[1, 2]) # OK

panel.apply(lambda df: numpy.int64(0), axis=[1, 2]) # NG

panel.apply(lambda df: numpy.float64(0.0), axis=[1, 2]) # NG
```

result is:

```
yIn [1]: import pandas

In [2]: import numpy

In [3]: panel = pandas.Panel(numpy.random.randn(5, 5, 5))

In [4]: panel.apply(lambda df: 0, axis=[1, 2]) # OK
Out[4]:
0    0
1    0
2    0
3    0
4    0
dtype: int64

In [5]: panel.apply(lambda df: 0.0, axis=[1, 2]) # OK
Out[5]:
0    0
1    0
2    0
3    0
4    0
dtype: float64

In [6]: panel.apply(lambda df: numpy.int64(0), axis=[1, 2]) # NG
---------------------------------------------------------------------------
PandasError                               Traceback (most recent call last)
<ipython-input-6-fa750da7769d> in <module>()
----> 1 panel.apply(lambda df: numpy.int64(0), axis=[1, 2]) # NG

C:\Anaconda3\lib\site-packages\pandas\core\panel.py in apply(self, func, axis, **kwargs)
    967         # 2d-slabs
    968         if isinstance(axis, (tuple,list)) and len(axis) == 2:
--> 969             return self._apply_2d(f, axis=axis)
    970
    971         axis = self._get_axis_number(axis)

C:\Anaconda3\lib\site-packages\pandas\core\panel.py in _apply_2d(self, func, axis)
   1066             results.append((e,obj))
   1067
-> 1068         return self._construct_return_type(dict(results))
   1069
   1070     def _reduce(self, op, name, axis=0, skipna=True, numeric_only=None,

C:\Anaconda3\lib\site-packages\pandas\core\panel.py in _construct_return_type(self, result, axes)
   1122
   1123         raise PandasError('invalid _construct_return_type [self->%s] '
-> 1124                           '[result->%s]' % (self, result))
   1125
   1126     def _wrap_result(self, result, axis):

PandasError: invalid _construct_return_type [self-><class 'pandas.core.panel.Panel'>
Dimensions: 5 (items) x 5 (major_axis) x 5 (minor_axis)
Items axis: 0 to 4
Major_axis axis: 0 to 4
Minor_axis axis: 0 to 4] [result->{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}]

In [7]: panel.apply(lambda df: numpy.float64(0.0), axis=[1, 2]) # NG
---------------------------------------------------------------------------
PandasError                               Traceback (most recent call last)
<ipython-input-7-e7ea1dec29c2> in <module>()
----> 1 panel.apply(lambda df: numpy.float64(0.0), axis=[1, 2]) # NG

C:\Anaconda3\lib\site-packages\pandas\core\panel.py in apply(self, func, axis, **kwargs)
    967         # 2d-slabs
    968         if isinstance(axis, (tuple,list)) and len(axis) == 2:
--> 969             return self._apply_2d(f, axis=axis)
    970
    971         axis = self._get_axis_number(axis)

C:\Anaconda3\lib\site-packages\pandas\core\panel.py in _apply_2d(self, func, axis)
   1066             results.append((e,obj))
   1067
-> 1068         return self._construct_return_type(dict(results))
   1069
   1070     def _reduce(self, op, name, axis=0, skipna=True, numeric_only=None,

C:\Anaconda3\lib\site-packages\pandas\core\panel.py in _construct_return_type(self, result, axes)
   1122
   1123         raise PandasError('invalid _construct_return_type [self->%s] '
-> 1124                           '[result->%s]' % (self, result))
   1125
   1126     def _wrap_result(self, result, axis):

PandasError: invalid _construct_return_type [self-><class 'pandas.core.panel.Panel'>
Dimensions: 5 (items) x 5 (major_axis) x 5 (minor_axis)
Items axis: 0 to 4
Major_axis axis: 0 to 4
Minor_axis axis: 0 to 4] [result->{0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}]

In [8]:
```
