To make it easier to manipulate an existing module, the internal schema manipulation functions must be exposed so that the internal greedy allocator is used correctly: #23. This requires cleaning up the internal function API so it is suitable for external consumption.