Make str2tmpl call radius_parse_attr()

So we don't have 2 pieces of code doing the same thing.
radius_parse_attr() doesn't deal with tags or array references
Add function to look up "name:0" or "name[1]" or "name:0[1]"

Because it's easier and faster to do it here, than to force
all of the callers to manually massage the dictionary names
Add tags and array references to value_pair_tmpl_t

radius_parse_attr() parses them
radius_tmpl2str() prints them
condition.txt tests them
radius_vpt_get_vp() uses tag now, but not array ref

No other code has been updated. e.g. evaluate, etc.
allow radius_vpt_get_vp() to use array references
Use radius_list_ctx() rather than re-implementing it
Move debug print map functionality to its own function

And as a side effect, always properly reparent the VP...
LF at EOL
Make radius_map2vp() call radius_vpt_get_vp() for map->src

So that we can have array references on the RHS of update
statements. And tags on the RHS, too
re-add xlat_spaces for debugging
In radius_map2vp(), always expand XLAT structures.

Looking for a % in the map name is pointless.  If the vpt is
marked as xlat, it's xlat.  The parser should take care of
ensuring that strings without % are created as literals
Don't core if vpt->vpd is NULL
Clean up syntax for list to list assignments

list !* ANY	remove all attributes in the list
list := list2	delete list, copy list2, and assign the copy to list
list += list2	copy list2, and append the copy to list

list := `foo`   read attrs from program, and assign to list
list += `foo`	read attrs from program, and append to list
Correctly set fields when compiling literal string

when we have an ATTR on the LHS, and a LITERAL on the RHS,
we need to set the RHS to be VPT_TYPE_DATA, not the LHS
and there are other fields we need to set, too
Verify VPs we're printing
Set the stack to zero to simplify gdb output
Distinguish failure cases
More sanity checks and messages for list assignment.

list := `...` is now a warning.  This is because the assignment
makes it look like it over-writes the list.  It doesn't.  We now
require

list = `...`  which is clearer that the operators used are the
ones which are returned from the external program.