Cleanup: move from malloc + strcpy -> strdup
Cleanup: create lval_new, initialize variables

1. This reduces duplicated malloc calls.
2. This will help debugging when referencing garbage vs. NULL on
accidental reference.
3. This will make it easer to move maintaining a freelist for lval
structs. Freelists == uber simple GCs FTW.