Faster join by using subclasses for each case (type of join and index keys)

This is not the cleanest way to handle multiple key types (callable, list of
incidex, and a single index), and I don't want the current approach to set
a precedence that will be used by other classes.  A cleaner approach would
be to have a single `make_key` function with the following signature:
```python
cdef inline object make_key(object rightkey, object item,
                            bint iscallable, bint islist)
```
I doubt that using `make_key` would significantly impact the performance.
Merge pull request #44 from eriknw/faster_join

Faster join by using subclasses for each case (type of join and index keys)