We are staying with 'String's.
Move functions that deal with free type variables into separate module.
Change imports.
Use 'Applicative' instead of 'liftM' and friends.
Remove (now unneeded) Scheme module.
Use better type alias.
Add new error message for too general types.
Move 'apply' into type class and create some variants that work on whole contexts.
Remove duplicate definition of 'free'.
Handle explicit type annotation.