Fix #639: Shadow '+' to handle string/list concatenation

The PR fixes #639.

```hy
=> (let [[op +]] (op 1 2 3))  ; note: this is NOT equivalent to (+ 1 2 3)
6
=> (let [[op +]] (op "a" "b" "c"))
'abc'
=> (let [[op +]] (op ["a"] ["b"] ["c"]))
['a', 'b', 'c']
=> (reduce + ["a" "b" "c"])
'abc'
=> (reduce + [["a"] ["b"] ["c"]])
['a', 'b', 'c']
```

``TypeError`` will be raised if there are no arguments rather than returning ``0`` because there is no single default value that would satisfy all types ``+`` can handle.

```hy
=> (let [[op +]] (op))
```
```py
Traceback (most recent call last):
  ...
TypeError: Need at least 1 argument to add/concatenate
```

The shadow tests were not included in the test suite for some reason. They are now.

Thanks for reviewing in advance.