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']
```
this should use `blaze.compatibility.basestring` for py3