DOC: existence docs and benchmarks.

![enhancing_performance](https://cloud.githubusercontent.com/assets/1731217/3224419/636f5dfc-f034-11e3-90e8-1469a162b674.png)

I've included some documentation on existence-type associations as requested by Jeff in [this question](http://stackoverflow.com/questions/23945493/a-faster-alternative-to-pandas-isin-function/) over at Stack Overflow.

The content includes a couple of plots generated by the script bench/bench_existence.py but I was not able to find any automation that executed those bench/bench_*.py scripts, so I may be missing a hook somewhere. That script also takes a couple of minutes to run.
This joins on the index (for both), so it is different to eg `df[df.index.isin(series)]` or `df[df.index.isin(lst)]` which checks for occurence in the values of the series/list.

With an example where the indexes don't match:
```
In [48]: lst = [1,2,10,99999999999]
    ...: series = Series(lst, name='data')
    ...: df = DataFrame(range(1000000), columns=['ID'])

In [49]: df[df.index.isin(lst)]
Out[49]: 
    ID
1    1
2    2
10  10

In [50]: df[df.index.isin(series)]
Out[50]: 
    ID
1    1
2    2
10  10

In [52]: df.join(series, how='inner')
Out[52]: 
   ID         data
0   0            1
1   1            2
2   2           10
3   3  99999999999
```
It is only because you take a series and dataframe with exactly the same index that it works as expected in your example, but I think that are too specific circumstances.