[WIP] Fixed #23753 -- Added a suite of SQL Functions

This is a work in progress, but not too far off being code complete. I thought it was better to open a PR rather than have people try to track individual commits on my fork.

A few notes at this point in time:

- ~~I plan on renaming Concat to ConcatPair (name TBD), and renaming ConcatMany to Concat.~~
- Some backends allow an arbitrary number of args to Concat, but I've chosen implementation simplicity by implementing multi-concat the same across all backends. If performance differences can be shown, I'll revisit this choice.
- ~~Some functions validate args in init, others in resolve expression. I think I'll standardise on init, since objects should be fairly complete on instantiation.~~
- I won't be implementing Case/When just yet. Michal on the ML has a better implementation than the one I had prototyped, and I'll let Michal finish and submit a PR for that part.
- ~~Tests are basic and should probably cover a lot more failure states.~~
- ~~Docs. They'll come last as always.~~

Are we happy about the namespacing? Is `models.functions.*` an OK place?
Ran intro a problem here -- seems that `0` needs to be `Value(0)`.
```
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/tim/code/django/django/db/models/manager.py", line 131, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/tim/code/django/django/db/models/query.py", line 341, in aggregate
    query.add_annotation(aggregate_expr, alias, is_summary=True)
  File "/home/tim/code/django/django/db/models/sql/query.py", line 971, in add_annotation
    summarize=is_summary)
  File "/home/tim/code/django/django/db/models/expressions.py", line 444, in resolve_expression
    c.source_expressions[pos] = arg.resolve_expression(query, allow_joins, reuse, summarize)
  File "/home/tim/code/django/django/db/models/expressions.py", line 408, in resolve_expression
    return query.resolve_ref(self.name, allow_joins, reuse, summarize)
  File "/home/tim/code/django/django/db/models/sql/query.py", line 1501, in resolve_ref
    field_list = name.split(LOOKUP_SEP)
AttributeError: 'int' object has no attribute 'split'
```