This simplifies the code and speeds up accessing function bodies and type extensions. Now, a lock is only necessary when create new bodies or extensions.
This is achieved at the cost of having a slighly less generic system, because we have to give e.g. different function body types different IDs. Since the number of different types is expected to be fairly low, this trade off is worth it.
The fact that the data structure has small object optimization is not important enough to justify a more complex name. Following commits will rename other data structures.