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
I don't think there is a `MissingArgument` method. Do you mean `ArgumentError`. Also I think there is a comma `, ` missing