[Console] Added three state long option

[Console] Added three state long option

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #11572
| License       | MIT
| Doc PR        | 

A three state long option, instead of the current 2 state version:
- Not setting the longoption will make the default set to false, just like a standard longoption.
- Setting the longoption without a value will set it to it's default
- Setting the longoption with a value will set it to that value.

Let's say --dev
```
php tool.php
array(1) {
  'dev' =>
  bool(false)
}
php tool.php --dev
array(1) {
  'dev' =>
  'the default value'
}
php tool.php --dev=test
array(1) {
  'dev' =>
  'test'
}
```

A couple of notes:
- I assume you guys agree that it's not a good idea to break current functionality. Therefor VALUE_OPTIONAL will stay how it is and I added a new constant: VALUE_OPTIONULL.
- All the tests still work!
- We need to come up with a better name.
- I'll need to write new test for the new config option (VALUE_OPTIONULL).

$default is the 'true' default value when a long option is not defined. It will always be set to false for long_options with VALUE_OPTIONULL. Just like it will always be set to false for VALUE_NONE. $set_default is the default used when an option is used but doesn't have a value set (i.e. --dev).

The problem is that InputOption is unaware of which default to use ('foo' vs 'foo --dev' vs 'foo --dev=bar') because it doesn't know the arguments the user passed.

Which resulted in me adding some smarts to InputDefinition to determine which 'default' to use. Which in turn means I need to keep both 'defaults' in InputOption.