dereference: fix handling DEREFERENCE from the database
The main problem is that we need to use the _early() hook. Otherwise
smatch_extra.c processes this before us and marks the pointer as non-NULL.
The next problem is that the get_variable_from_key() generates a var/sym
and then we generate an expression back from that. The problem is that
if we're dealing with complex things like arrays then that's not a var/sym
so it doesn't work. We can instead go directly from and arg and a key to
an expression and that will work better.
Signed-off-by: Dan Carpenter <error27@gmail.com>