fix non-lazy calls not executed before `first` & `last`

Same bug as before, but with `first` & `last` scenario:

```
_([1, 2, 3]).map().xor([4]).last(); // returns '3', while it should '4'
```

We put parentheses around conditions with && or ||. So `isLazy && !hasQueue` would be `(isLazy && !hasQueue)`. Also since `hasQueue` is only used as `!hasQueue` it makes more sense to call it something like `noQueue` and assign it as `!this.__queue__.length`.