General dispatcher cleanup, remove a lot of cruft

Beginning benchmark:

```
In [1]: import numpy as np

In [2]: import blaze

In [3]: timeit np.sin(3.14)
100000 loops, best of 3: 2.22 µs per loop

In [4]: timeit blaze.sin(3.14)
1000 loops, best of 3: 652 µs per loop

In [5]: timeit blaze.eval(blaze.sin(3.14))
100 loops, best of 3: 2.02 ms per loop
```

So presently, constructing the single-node deferred evaluation graph is 300 times slower than running the numpy ufunc, and then also evaluating it is 3 times slower yet. This branch will try to start chipping away at those numbers a bit.