Cleaned up package layout.

Interfaces are now clearly seperated from the implementation. This is the same packaging style as the mapreduce implementation of chris and doesn't lead to a totally messed up package layout like the map. The advantage are:
- a user knows what he can and can't touch (impl package is hands off)
- we can do whatever we want in the impl package because the user won't touch it
- the user understands better what to use since there is less exposed