Binary ops

All binary ops working including int to float casting when needed.  
simply for readability?

```ocaml
and bin_op_to_code lhs o rhs side =
    let (setup1, lefts), (setup2, rights) = match side with 
        | None ->  sexpr_to_code lhs, sexpr_to_code rhs
        | Left ->  (cast_to_code Float lhs, sexpr_to_code rhs
        | Right ->  sexpr_to_code lhs, cast_to_code Float rhs
    in
    let os = op_to_code o in
    let tmp_var = (rand_var_gen ()) in
    let new_tmps = sprintf "%s := *%s %s *%s" tmp_var lefts (op_to_code o) rights in
    (setup1 ^ "\n" ^ setup2 ^ "\n" ^ new_tmps) , (sprintf "&%s" tmp_var)
```