Performance regression in .ffill()
Under pandas 0.12:

``` python
In [4]: from pandas import *

In [5]: from numpy.random import randn

In [6]: In [14]: df = DataFrame({'one' : Series(randn(3), index=['a', 'b', 'c']),
   ....:                 'two' : Series(randn(4), index=['a', 'b', 'c', 'd']),
   ....:                 'three' : Series(randn(3), index=['b', 'c', 'd'])})

In [7]: df
Out[7]: 
        one     three       two
a -0.899073       NaN  2.164487
b  0.142272  0.158407 -1.387754
c  0.583869  1.063867  0.542845
d       NaN  0.739295  1.527532

In [8]: df.ffill()
Out[8]: 
        one     three       two
a -0.899073       NaN  2.164487
b  0.142272  0.158407 -1.387754
c  0.583869  1.063867  0.542845
d  0.583869  0.739295  1.527532

In [9]: %timeit df.ffill()
10000 loops, best of 3: 64.4 µs per loop
```

With pandas 0.15:

``` python
In [7]: %timeit df.ffill()
The slowest run took 7.81 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 101 µs per loop
```
