General purpose type converter for .NET that attempts as many mechanisms for conversion between two types as possible