My goal is to maximize the portability of my scheme source code.

Here is what I think I should be doing:

Confine most of my code to r5rs scheme, and, with srfi-0
support, use SRFI's when I need them.  
Similarly use the full gsi scheme language on occasion when I need
that. 

Presuming gsi is a superset of r5rs, I could just write everything
in that language and use self discipline, but It would be nice to get
support from the system inhibiting me from stepping outside the
bounds of r5rs in a given module.

I'm not sure how to go about organizing that sort of thing.
 
My previous scheme experience has been with the PLT scheme module
system which makes it easy to combine different modules written in
different 'dialects'.  So perhaps I am a bit spoiled.

I have not found documentation which suggests how you might combine
source files written for different variations on scheme using gambit-c,
such as combining parts written in gsi, r4rs, r5rs, r5rs with srfi 0,
into a single program.

I also lack information on what SRFI implementations are available, where
to get them, and how to use them in a gambit scheme program.

Can someone please point me at the right information or offer advice.

TIA
--
Pierre