Support 'map' in 'asyncore#loop'

'asyncore#loop' always operates on a map, a dictionary of channels. When
a channel is created, unless a map is explicitly specified, the channel
is put into the global map. Ditto for 'asyncore#loop': unless a map is
explicitly specified, the procedure operates on the global map.

Make Engine and its subclasses to take an optional 'map' parameter so
that 'fixlib' is not limited to the global map.