Restructure API

Currently, the API is flat in the lake module. A more ergonomic API would be useful. For example, a consumer needs to expect to receive DELIVER messages. For that, a consumer behaviour might make more sense then simply forwarding that to the process which called subscribe. Splitting the API into semantic partitions could make working with it nicer.