Refactor memoizable

This branch refactors adamantium to use memoizable, which are the memoization methods extracted from adamantium, generalized and usable for all kinds of objects.