What techniques are available and advised to dynamically wrap method calls at runtime? For example, imagine I want to wrap a call to method `foo()` with some timing information without requiring the user to alter there code at all.