Programmable assembly of nanoarchitectures using genetically engineered viruses