Exon objects

Added methods to EnsemblRelease:
* `exon_by_id(exon_id)`
* `exon_by_transcript_and_number(transcript_id, exon_number)`
* `exons_at_locus(contig, position)`

These return Exon objects, which in addition to basic location info, also track the offsets of start and stop codons. 

I'm not totally comfortable with Gene, Transcript, and Exon objects (neither their interface nor their current implementation, which makes lots of wasteful database queries). However, I haven't yet found anything more convenient for writing varcode. I'm open to scrapping these things later, once we understand a little more about how pyensembl can/will be used. 
Another good catch, thanks. Also, I realized that if the strand is '-' then the "earlier" position is actually the annotated *end* of the codon, not the start. Fixed this and adding some tests now.