Restructuring with internal packages

This demarcates the internal abstract implementations and interfaces