Enabling Specialization for Dynamic Programming Languages