Fixed typo.
Removed LookupData.Tags.

This large array was always filled with zeroes. This took CPU time and
Expose properties as arrays, not IList<T>, allowing non-virtual access.
Made method static.
Use Array.Clear instead of a loop to zero out array.
Use explicit types for collections.
Optimised usings.
Merge overloaded constructor using default values.
Made fields readonly.
Validate bit depth before locking image bits.
Cache fields as local variables. Profiling saves about 7% of the time in this, the most costly function.
Granularity is a byte. Some arithmetic checked for overflows.
Reuse large arrays in nested loops, reducing GC.
Change QuantizedPalette.Colors to an array.
Hoist field access outside of loop.