Added some missing detach()s to List<T>, ByteVector and String.

Non-const ```begin()```/```end()``` require a ```detach()```.
Currently, ```List<T>```, ```ByteVector``` and ```String``` behave like this: 
```
List<int> l1; // { 1, 2, 3, 4, 5 };
List<int> l2 = l1;
List<int>::Iterator it = l2.find(3);  // Logically, it points to l2[2]. Not l1[2].
*it = 33; // This modifies not only l2[2] but also l1[2]. 
```