func Start(in io.Reader, out io.Writer, engine *string) {
	scanner := bufio.NewScanner(in)
	env := object.NewEnvironment()
	constants := []object.Object{}
	globals := make([]object.Object, vm.GlobalsSize)
	symbolTable := compiler.NewSymbolTable()
	for i, v := range object.Builtins {
		symbolTable.DefineBuiltin(i, v.Name)
	}
	for {
		fmt.Printf(">> ")
		scanned := scanner.Scan()
		if !scanned {
			return
		}
		line := scanner.Text()
		l := lexer.New(line)
		p := parser.New(l)
		program := p.ParseProgram()
		if len(p.Errors()) != 0 {
			printParserErrors(out, p.Errors())
			continue
		}
		if *engine == "eval" {
			evaluate(program, env, out)
		} else if *engine == "vm" {
			if err := compileAndExecute(symbolTable, constants, program, globals, out); err != nil {
				fmt.Fprintf(out, "Woops! Compilation failed:\n %s\n", err)
				continue
			}
		}
	}
}
Start - starts REPL, passes stdin to lexer line by line
package repl
import (
	"bufio"
	"fmt"
	"io"
	"github.com/bradford-hamilton/monkey-lang/ast"
	"github.com/bradford-hamilton/monkey-lang/compiler"
	"github.com/bradford-hamilton/monkey-lang/evaluator"
	"github.com/bradford-hamilton/monkey-lang/lexer"
	"github.com/bradford-hamilton/monkey-lang/object"
	"github.com/bradford-hamilton/monkey-lang/parser"
	"github.com/bradford-hamilton/monkey-lang/vm"
)
const Oops = `            __,__
ooooooo                                      oo
o888   888o   ooooooo  ooooooooo    oooooooo8 8888
888     888 888     888 888    888 888ooooooo 8888
888o   o888 888     888 888    888         888 88
  88ooo88     88ooo88   888ooo88   88oooooo88  oo
                       o888
`