[needs tests] Add nested property setting

`get()`ing nested properties using dot-notation works, so it seems logical that it should work during `set()` as well. I needed it today, so implemented it.

It behaves like a `mkdir -p`, creating objects along the path if they don't exist. The other option is to throw in error in that case. I haven't thought through the pros/cons of each.

If this is a desired feature, I'll happily add some tests & polish it up.
Use a `for` loop without `shift` to improve performance.