Implement OrdinalEncoder for a single column of strings:
fit(values): assign codes 0, 1, 2, ... to categories in sorted order; return selftransform(values): map to codes; categories never seen in training become -1inverse_transform(codes): map back; -1 becomes None