Make define syntax work correctly

- Error message on for example (define 10 10)
- Return defined symbol instead of value
Add Scope and Env types with methods

NewScope to create the scope
Scope.Env() returns current environment
Scope.AddEnv() adds a new environment
Scope.DropEnv() drop current environment
Add support for getting and setting variables in Scope
Use new Scope in evaler
Add nested scopes