Fix Symbol#compile_as_copy_arg_call to take context into account
Make |inside_block| take a |block| argument

This will (among other things) allow nodes to compile code in the
context of blocks they contain.
Consider symbols with category == :reference as variables

This ensures that arguments passed by reference get treated as
variables.
Function args go to it's block symbol table

This makes the block chain a little bit simpler.
Handle function argument redefinition

YCP allows to define a variable with the same name as a function
argument inside a function. Without this commit, we created a duplicate
entry in the symbol table in this case, which lead to "2" suffix
appended to the variable name in generated Ruby code. It could have also
caused some other problems as Y2R code generally assumes unique entries
in symbol tables.