Raise on multiple clauses with default arg

I decided to raise instead of warn because the resulting code is very confusing (arguably even wrong). From @josevalim's stackoverflow answer:

```elixlir
def sum([], total \\ 0), do: total
# becomes
def sum(list), do: sum(list, 0)
```

Adding another element to the function definitions table was quite scary since it's a big a tuple used in many places. I may have missed a place if it was not tested, so please take a closer look. Maybe it's time to make it a map?

Closes #2078.