add support for free variable

eg:
(define (test) x) ;; this function return x, but x is not defined
;; the x is free variable
(test) ;; return 'undefined
(define x 12)
(test) ;; return 12