Headers crossusing refactoting

All types and constants are removed from freeserf.h
Now we can clearly see how modules are using each other.
Why? Is it just aesthetics or is there a technical reason for this kind of change?