split encoder implementations. still need to deal with reflection exceptions out of ReflectiveEncoder