refactor incomplete data parsing
support `(define (foo . args) . body)` style definition
read multiple expressions; read exprs are wrapped in a begin
support rest arguments
do not wrap with a begin read expressions if it is single