Change evalThunk, EV

EV becomes less polymorphic (EV (after) = EV IO (before))
evalThunk destructively changes the content of Thunk(IORef ThunkData)
Add #seq operator and some strict functions (*_s)

Introduce #seq operator (a #seq b evaluates a, then evaluates b)
foldl_s evaluates strictly, keeping thunk from being too large
[Error] The type of times_s is not correctly inferred(actual:int->(a->b)->a->a, expected:int->(a->a)->a->a)
Fix bugs in type inference (TypeInf.hs)