Moved backends into their own c files and made their inclusion configurable