BUG: fix Panel.fillna() ignoring axis parameter (re-submission)
closes #3570 
closes #8251

This is a re-submission of PR #8395 and addresses issue #8251. My apologies for the duplicate PR, but despite rebasing to pydata/pandas master, the original PR would not update with my new commits and I couldn't get rid of the `LooseVersion()` errors in the Travis build.

This PR may need some fleshing out still, but I wanted to submit this to see what the thoughts are on this approach. For this PR I've created a new interpolation mechanism at the block level to implement filling across 3 or more dimensions. This avoids the fiddly problems of trying to implement filling of 3+ dimensions at the frame level. However, it isn't possible with this technique to fill across blocks of different dtypes, although that seems like that should be a rare occurrence. 

Incidentally, this will also address #3570, which is one of the issues referenced in #9862.

I merged the previous `interpolate_2d()` and `interpolate_nd()` functions into a single function and then renamed it simply `pad()`. I renamed `interpolated_1d()` to simply `interpolate()`. 

Looking through the code, I see a number of places where the terms "pad", "fill", and "interpolate" are used semi-interchangably and with different meanings. I think it would clear things up if, at least internally, these terms had these fixed definitions:

**fill**: fill in missing values with a static value
**pad**: fill in missing values with the most recent non-missing value
**interpolate**: interpolate in the `scipy.interpolate` sense

I'm not suggesting any changes to the public API, but I would be willing to work on a new PR to try and makes things internally consistent. I don't want to confuse this PR by trying to roll it in here.

In any event, this fix seems to work OK. Not sure if it needs more documentation other than mention of bugs fixed in whatsnew.
 updated
 Implemented most of the suggestions - just need clarification on what is meant by about the ndims being the same.
 @stahlous do you want to rebase / update. fyi, you might want to squash as well.
 I squashed the commits. Sorry for the delay - had other things going on the past couple weeks. Can you take a look and let me know if I've addressed everything?
 closing, we are going to deprecate `Panel` in 0.18.0
