Moving implementation to Internal module

Decided to hide implementation details from top-level module. Since
Internal module is exposed we have the same advantages as before, but
with explicitly marked parts that aren't part of the stable API.