    FDPanel object, a 4 dimensional pandas container (version 2)
FDPanel is like a Panel object, but provides 4 dimensions: labels, items, major_axis, minor_axis

(version 2: much of the code changes now occur in panel.py; fdpanel.py is a thin wrapper over an n-dim 
panel like obj; supporting NDPanel like objects with named higher dimension will be very easy)

instead of using a dict of Panels to hold data, the FDPanel provides a convenient represenation in pandas space
with named dimensions to allow easy axis swapping and slicing

see examples/4D Example 2.pdf for creation and usage
## motivation

io/pytables currently provides a nice representation of a table to store a Panel object
directly (assume item x major (dates) x minor)
FDPanel allows many named tables to represent a collection of these tables in a single hdf5 file
## testing

tests/test_fdpanel.py provides a similar methodology to test_panel.py

FDPanel required an overhall of many methods in panel.py and one change in core/index.py (regarding multi-indexing)
almost all methods in a Panel are extended to FDPanel (with the exception in that Panel now allows a multi-axis on axis 0)

docstrings need to be refreshed a bit and made a bit more general

all tests that are not skipped pass

join works but merge testing code not complete yet (pandas.tools.merge)

Awesome. I'll have to review this in more detail after 0.9 final is out
 3 obvious extensions to this:
1. allow a class method on NDFrame to set/reset axis properties (e.g. set all of the _AXIS_\* stuff, and recreate the axes) - essentially a way to rename (or provide alias) for different axes - e.g. instead of label,items,major_axis,minor_axis, could use latitude,longitue,altitude,time for example - should be straightforward to do this
2. could rename FDPanel -> Panel4D to be consistent, create Panel5D (5th dimension could be called by default ???)
3. a ND class creator - take an existing class and add a dimension to it  
   e.g. to create Panel4D I could do something like:
   `Panel4D = NDCreator(Panel, axes = ['labels','items','major_axis','minor_axis'])`  
   Panel5D then is trivial e.g.
   `Panel5D = NDCreator(Panel4D, axes = ['high_dim','labels','items','major_axis','minor_axis'])`  
   
   Of course this is whole exercise is non-trivial:
   - a higher dimensional object is not so easily specified, as the plane/join axes need to be computed (which I think could be done automagically)
   - this new object needs to be inserted in the indexing.py (thinking multi_take here) - but I think this could also be handled by changing multi_take to inquire to the object if it can handle this.....could get a bit tricky)
   - the constructor_slice needs to be created properly (e.g. in order to create a Panel5D, you have to have a Panel4D, which in turn requires a _compatible_ Panel - e.g. same labels/alias for sliced objects) 
 Panel4D pull request supersedes this
