handling of optional arguments in IBase methods should be clearer

## Motivation

While writing the docs for the IBase class, I saw that there were a number of cases where the code was unclear.  

### `trait` control is unclear

This is a straight refactor with no behavior change.

### await and transition option handling

These might be breaking changes.  The code as written is very confusing.   I *think* I understand the intent...

## todo

- [ ] @krukow needs review
- [ ] needs rspec tests
```
unless wait_opts.has_key?(:await_animation) && !wait_opts[:await_animation]
```

I am assuming that if :await_animation is _truthy_ - non-nil and not false, you want to wait .

If that is the case, then:

```
if wait_opts[:await_animation]
```

is clearer.

I am afraid I don't understand the condition as it is written.