Final solution to getting proper exon/intron start/end coordinates:

exon starts must be de-incremented by 1.
exon ends no need to be adjusted.

Using the newly adjusted exon starts/ends, just take the intron
coordinates as exon end to exon start (adjusted).

Code is now written to be easily incremented/deincremented for introns.