Issue #1394: Allow var variables to shadow let variables.

I added a new meta-property to the block-scoped stack of
variables called (shadowed). When addlabel adds a new
function level variable it checks whether there's already
a block-scoped variable with the same name in the current
scope and if there is, it sets the (shadowed) property of
that variable to true. getlabel function respects that
property and doesn't return variables with (shadowed) == true.

At the end of doFunction we go over a list of all variables
defined in this function and un-shadow their block-scoped
friends if needed.

A bit hacky but I don't have any better idea right now
that doesn't involve big refactoring that merges blockscope
and funct trees together.