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. 
For testing I want to be able to non-destructively construct return values. Also, having a function that modifies its inputs makes me feel dirty.