Idea: Frame/series should support grep-like context specification
In shell grep you can do stuff like:

```
λ seq 1000 | grep -C 3 500
497
498
499
**500**
501
502
503
```

```
λ seq 1000 | grep -B 1 -A 3 500
499
**500**
501
502
503
```

I'd be glad to have something like

``` python
s.grep_index(pat_or_pred,A=1,B=3) # -> list of series/df , each of len(A+B) or C
s.grep_index(pat_or_pred,C=5)
also
s.grep_index(label_list,C=5)
```

in core.

An example use-case:
looking for point of change in a timeseries, where you want to
grab a window around a point of change:

``` python
s = some_timeseries
# pickout index label where a big change occured
cps = s[abs(s.diff()- threshold) > threshold]
# cps is a list of labels for "interest points"
list_of_s = s.grep_index(cps,C=5)

s[0]
< 5 rows from s, with the middle one being the first "intrest point" in cps >
```

the "return list of series" is really a sort of variant on groupby,
and could concievably be implemented on top of something like
#3101, after de-warting.

Would also love to have this working with #2460 (if it ever makes it in)
for the same (but slow) on plain,unindexed data columns.
