Changing generic arguments to use parameter names so they're more clear.
Adding generic constraints so that arrays always have to be arrays of value types.