Settling minmax assumptions + tests

I've added some relevant assumption methods for minmax, including tests. It was weird, but I had to add the method `_eval_is_irrational` and `_eval_is_noninteger` - for some reason, there's no proper mixin here, and even if the max was evaluated to be `real=True` and `rational=False`, it didn't conclude that it is `irrational=True` - so I've added it manually.
Perhaps something like
```python
def _eval_has_property(self, property):
    p = lambda arg: getattr(arg, property)
    if all(p(arg) for arg in self.args):
        return True
    if any(p(arg) is False for arg in self.args):
        return True

...

def _eval_is_algebraic(self):
    return self._eval_has_property('is_algebraic')
```
?

The problem with this implementation is that perhaps it's a bit slower...

I can also replace the `lambda` line with
```python
    p = operator.attrgetter(property)
```
or even pass `operator.attrgetter("is_algebraic")`, say, as the parameter from `_eval_is_algebraic`, namely:
```python
def _eval_is_algebraic(self):
    return self._eval_has_property(operator.attrgetter('is_algebraic'))
```

What do you think?