Unify boolean params

Required and optional boolean params are treated the same.
For every option 'foo', you get a `--foo` and a `--no-foo`.
I've also removed the mutually exclusive groups for boolean
params.

The new behavior is that the last specified boolean param wins.

There's still an existing issue for docs (we currently generate the same
docs twice for the `--foo` and the `--no-foo`), but this fixes the issue
now where you actually get the same parameter documented twice,
and the negative param is not documented:

```
       --should-decrement-desired-capacity (boolean) Specifies whether (true )
       or  not  (false  )  terminating this instance should also decrement the
       size of the  AutoScalingGroup .

       --should-decrement-desired-capacity (boolean) Specifies whether (true )
       or  not  (false  )  terminating this instance should also decrement the
       size of the  AutoScalingGroup .
```

I plan on some larger refactorings to the parameter code but wanted to
get this commit in first.