Refactored CreateCommand

Created a ```PackageLocation``` that includes the remote and cache
locations. Then seperated the CreateCommand into several smaller classes
for better separation of concernts. This will allow the smalled classes
to be unit tested specifically and cleaned up several classes that were
doing too many things.