Small optimizations to expressions

`Label` on `Map` and projections on `Projection`, `Merge`, etc... all return novel objects rather than wrapped ones.

```Python
In [1]: from blaze import *
t=
In [2]: t = TableSymbol('t', '{id: int, name: string, amount: int}')

In [3]: t['name']['name']
Out[3]: t['name']
```
I think this should be `self.project(c)` instead of `self.project(self, c)`