support multiple provider instances

added provider cache on the data context by root type name - this allows
you to use many different sql provider objects on different databases or
vendors.  Also allowed a special case for individuals that have GUIDs as
their primary key.