Similar to how we only define `inherited` when we need it, we should only define `initialize` and `allocate` where needed. It would also be nice to do this for `reset_memo_wise` and `preset_memo_wise` as well—we don't always need them on both the class and instance level.