Add a Core namespace to separate public & private classes, close #19