Dynamic/static arrays: Fix some doc errors

Split out the less controversial fixes from https://github.com/D-Programming-Language/dlang.org/pull/623:

Fix some documentation errors, around dynamic array semantics and static array syntax.
- Add a note about the need for assumeSafeAppend in order to regrow a dynamic array.
- Add examples for static arrays as lvalues (for copying and setting).
- Soften an over-strong claim in ctod.dd.
- Also tweak some heading levels and such.
Well, it was already mentioned on line 160 ("a = s" there), and this section is focused on copying.
I agree with a few points you may be implicitly making:

1) Sample code should use assert in this way to 'demonstrate' things, especially surprising things like this one.
2) These semantics are surprising enough to warrant more exposition.
3) This documentation is grouped by operation (such as copying), which only answers half of the questions a reader will have. The other half is: Given a particular syntax, like "array1 = array2;" what does it mean for a dynamic array vs. a static array?

I haven't decided what solution to propose, but here's a possible thought:
Perhaps this should be divided into a few sections - first considering only copying/assignment,
next adding concatentation and 'array-setting', and finally more esoteric things like prefix vs. postfix notation.
And then within each of the first two sections, explore all the interactions, in both 'directions' (that is, ordered by syntax and ordered by semantics).