Viruses as complex adaptive systems