Emits a LdArg with an optional OpCodes.Box if p's type is a value type or a generic parameter (after a OpCodes.Ldobj if the parameter is by ref). Handles static or instance methods (takes care of System.Reflection.CallingConventions.HasThis bit of the method's CallingConvention).