The structural basis of the genetic code: amino acid recognition by aminoacyl-tRNA synthetases