Changed accessability of several functions
Used InternalsVisibleTo to expose internal functions to unit testing project.
Made all functions not needed to be called by Main() directly into internal functions to reduce surface area of API