Added support for nested path traversing in DirectFieldAccessor

Major change in ```DirectFieldAccessor``` adding support for nested path traversing.

As an example, piece of code:

```
Person person = new Person();
person.name = "John";
person.address = new Address();
person.address.city = "London";

assertThat(new DirectFieldAccessor(person).getPropertyValue("address.city"), is("London"));
```

works after improvements made in this pull request.

As a small explanation - mapping creating algorithm has slightly changed: instead of creating ```fieldMap``` in ```DirectFieldAccessor```'s constructor, field is added to map when it is being read or written for the first time. Thanks to that there is no chance to fall into infinite loop or poor performance for complex objects - we map only what has to be mapped.

I have signed and agree to the terms of the SpringSource Individual Contributor License Agreement.

Issue: SPR-9705, SPR-10623, SPR-8692