Use case insensitive comparison

Instead of first using `StringLower` and then compare using `==`, compare
using `=` instead, which is a case insensitive comparison.
Improve fix for #3

The `.down()` method no longer automatically takes care of checking if the
timeout has passed. Instead such a check is sent as a parameter. Now the
`Dual.Key` class no longer needs to reference `Dual`, and unnecessary
{downKey down} won't be sent.
Remove comment support in the comboKeys setting

It prevented `;` from being used as a comboKey, and it is not worth
introducing escape rules.
Unfortunate mega-commit (0.3.0)

- Fixed: The dual-role keys now trigger other hotkeys out of the box (except hotkeys using the `&`
  combiner), with no changes to the other hotkeys required. They also work more reliably.
- Improved: Re-implemented the functionality of `Dual.send()` way more robustly.
- Changed: Replaced `Dual.send()` with the `SendInput()`, `SendEvent()`, `SendPlay()`, `SendRaw()`
  and `Send()` methods. (Backwards incompatible change.)
- Replaced the `Dual.set()` with the `combine()` method, in order to fix the above. (Backwards
  incompatible change.)
- Replaced the `comboKeys` setting with the `comboKey()` (and `combo()`) method, because of the
  above. (Backwards incompatible change.)
- Added: Per-key settings.
- Changed: The script now exports the class `Dual` itself, not an instance of the class. (Backwards
  incompatible change.)

Also lots of code and docs cleanup.