Use the ->possible states and remove the merge_hook().
The merge_hook() approach gets confusing as pants when you have tons and
tons of states. Using the ->possible states is clearer hopefully.
I added in two more states arg_nonnull and arg_null so that we can handle
asserts better. Tons and tons of code has an assert to check that
arguments are non null. Printing an error creates tons of false positives.
On the other hand, treating it like an argument may help actually catch
bugs.
Signed-off-by: Dan Carpenter <error27@gmail.com>