Converting strings to enums should be case insensitive

In AbstractEnumType.cs, the StringToObject method is trying to convert
strings to enums - but values in DB tables may have been written without
regard to case.  So make the enum.parse be case insentive

Additionally (or alternatively) StringToObject should be virtual
so that we can override this behaviour (StringToObject is called
by derived classes)