Ncore: Architecture and Implementation of a Flexible, Collaborative Digital Library