Some refactorings

Please, review #35 first as this branch builds on the other.

This PR consists of only loosely related commits, most of them only propositions. We should cherry-pick, what we agree on.
I'm in favor of having *some* warnings settings and stick to the policy that we don't want warnings. (In my experience we shouldn't have `-Werror` as sometimes we want warnings and still commit them, e.g. for deprecations.) For my own projects I'm mostly using `-Wall -fno-warn-name-shadowing`, but I'm perfectly fine with `-Wall` for servant. (There's lots of name shadowing going on, that we'd have to fix.)