ByteaTextToByteArray conversion optimization

Hi Francisco,

I have my own GIS project that mostly deals with reading of geospatial data. Working with PostGIS I use Npgsql.
By doing some profiling of my application I've found out that the function ByteaTextToByteArray in the BasicBackendToNativeTypeConverter class takes too much time to convert data from hex format.
Then I tried to find a way to speed up the conversion.
It seems that current implementation is not well optimized:

  	     MemoryStream ms = new MemoryStream(); <-  is unnecessary object
            if (BackendData.StartsWith("\\x"))
            {
                // PostgreSQL 8.5+'s bytea_output=hex format
                for (byteAPosition = 2; byteAPosition < byteAStringLength; byteAPosition += 2)
                {
                    byte value = Convert.ToByte(BackendData.Substring(byteAPosition, 2), 16);     <- substring and byte conversion is slow

In my implementation I tried to avoid those slow parts. The results of the tests are the following

Table with linestrings:
    Size: 483 MB
    Rows: 2260348
    Master branch: 46117 ms           
    Optimized version: 12566  ms   (10639 ms)
    Speeding-up factor: 3.66 

Table with points:
    Size: 383 MB
    Rows 1167910 
    Master branch: 35185 ms            
    Optimized version: 9219 ms  (8187 ms)
    Speeding-up factor: 3.81 

As you can see we can significantly improve the performance of the conversion.
In the commit you can find some commented lines of code where I played with unsafe code which also gives some performance gain.

The time values in brackets were obtained using unsafe code and the following function
    internal static Object ToBinary(NpgsqlBackendTypeInfo TypeInfo, char[] BackendData, Int16 TypeSize, Int32 TypeModifier)
instead of
    internal static Object ByteaTextToByteArray(NpgsqlBackendTypeInfo TypeInfo, String BackendData, Int16 TypeSize, Int32 TypeModifier)
       
As you can see from two functions the conversion from char[] to string in the case of bytea data is superfluous.
Please take into consideration that the last improvement was not commited. I hope that you can catch the idea of the last improvement.