Allow the default sound to be suppressed (via setting 'sound' => null) when constructing a message

Replaced `isset()` for `array_key_exists()` in the `BaseOptionedModel` to better detect when options were set
but were null. (`isset` considers an array key with a value of `null` to be unset).
Updated  to use  as well
Merge pull request #8 from phindmarsh/silencer

Allow the default sound to be suppressed (via setting 'sound' => null) when constructing a message
BaseOptionedModel and BaseParameteredModel adapted to PR #8