ENH: Allow function in Series/DataFrame get syntax
Currently, pandas makes clever use of `__getitem__` to filter/mask Series and DataFrame.  At times, the current abstraction is leaky - for instance, `df[18 < df['age'] < 25]` would raise an exception, even though cascaded compare symbols in that manner are legal Python syntax.

It would be awesome to also be able to pass in a function to the `__getitem__` function that would act as a filter.  This would allow users to use all of Python's language features for filtering while still maintaining the brevity intended for these statements.  

For example:

``` python
df[lambda row: 18 < row['age'] < 25]
```

This would also allow lengthier filters to be defined outside of the getter square brackets:

``` python
def age_filter(row):
    return 18 < row['age'] < 25 if row['country'] == 'USA' else row['age'] > 13
df[age_filter]
```

Functions as viable filters would also allow for chaining of filter functions without creating multiple intermediary DataFrames or Series, making optimization of cascaded filters much easier.
