Could GA's determine fitness by "Fighting" against each other?
i'm the main developer of Neataptic, a Javascript neuro-evolution library.


Very effective! Realise that this is how real-life evolution happened as well: we kept on improving against other species, which forced them to improve as well.
Very practical, especially if you don't want to set up any 'rules' like you say, it makes the genomes find out what the rules are themselves.
Basically, you let each genome in the population play X games against other genomes, I advise you let each genome play against every other genome in the population. An example of scoring would be giving the genome 1 point for winning, and 0.25 or 0.5 for a tie. Each game should always have a result! 
I'm not sure about this one, as I haven't implemented speciation. 


I want to give you some examples that I have worked on: 


Agar.io AI (neuro-evolved neural agents) - basically, I let neural networks evolve to get the highest score they can in agar.io, by competing against each other! It worked better than I expected.
Currently i'm working on new project, a kind of 'cops and robbers' style game.