treat all arguments to concat functions consistently

Currently the first argument must be of the appropriate type to avoid surprising results, but arguments beyond the first may be of any type.

/cc @buzzdecafe, @CrossEye, @megawac

This works, and is much terser!

```diff
diff --git a/nucleotides.js b/nucleotides.js
index 41e4d81..ab5fcdf 100644
--- a/nucleotides.js
+++ b/nucleotides.js
@@ -74,16 +74,9 @@ void function() {
           // unsuffixed names for future use.
           return [
             isMutator(method) ? method.name + '!' : method.name,
-            (function() {
-              switch (method) {
-                case Array.prototype.concat:
-                  return _.bind(method, []);
-                case String.prototype.concat:
-                  return _.bind(method, '');
-                default:
-                  return _.bind(Function.prototype.call, method);
-              }
-            }())
+            method.name === 'concat' ?
+              _.bind(method, new ctor) :
+              _.bind(Function.prototype.call, method)
           ];
         })
         .object()
```

Why do you consider this evil, @megawac?