#65 support for nested properties

Finally, after a lot of iterating hence-and-forth. Here's the solution for nested properties as discussed in #65.

Some points addressed:

1) (Error)Checking of the source side has been moved to (construction-time) of the `@Mapper`
2) `BeanMappingMethod` has been restructured. It first creates a  'todo' list of target properties, and than slowly empties the list by first handing the defined `@Mappings` that act on a target property, and then handles the remaining properties based on name.
3) Finding a suitable name candidate is handled completely in `BeanMappingMethod`
4) `SourceReference` contains all required information on the source part of the mapping distilled from the source information (so method and mapping). 
5) `BeanMappingMethod#build` became to large. It has been partially refactored, although perhaps not as much as I desired. An `getPropertyMapping` should perhaps be made per `TargetAccessorType` iso squeezing them all in the same method. But that's for a next refactoring :).
6) I used the existing `ForgedMethod` mechanism to handle the nested properties in an isolated fashion. That leaves room for extension (e.g. list and map support).
7) I handled the parameter-only (so no source bean) case as well.

I'm not sure whether I understand fully what you mean. 

Did you look at the generated code in the unit test? That possibly explains your question :). Anyway, there are three scenarios:
1) Parameter only (new)
2) Have a normal (non nested) mapping
3) Have a nested mapping (new).

Its all about how you build up your `sourceRefStr` in the `PropertyMapping`.
1) `sourceParam.getName()`
2) `sourceParam.getName() + "." + propertyEntry.getAccessor().getSimpleName() + "()"`
3) `forgedMethodName + "( " + sourceParam.getName() + " )"`

an example of generated code:

```java
    @Override
    public ChartEntry map(Song song)  {
        if ( song == null ) {
            return null;
        }

        ChartEntry chartEntry = new ChartEntry();
        chartEntry.setCity( songArtistLabelStudioCity( song ) );
        chartEntry.setRecordedAt( songArtistLabelStudioName( song ) );
        chartEntry.setArtistName( songArtistName( song ) );
        chartEntry.setTitle( song.getTitle() );

        return chartEntry;
    }

...
    private String songArtistLabelStudioCity(Song song) {

        String string = null;
        if ( song != null ) {
            Artist artist = song.getArtist();
            if ( artist != null ) {
                Label label = artist.getLabel();
                if ( label != null ) {
                    Studio studio = label.getStudio();
                    if ( studio != null ) {
                        String city = studio.getCity();
                        if ( city != null ) {
                            string = city;
                        }
                    }
                }
            }
        }
        return string;
    }
```
so example of 
2) `chartEntry.setTitle( song.getTitle() );`
3) `chartEntry.setCity( songArtistLabelStudioCity( song ) ); `

Although the `Dire Straits` should perhaps have made a better example than the `Beatles` :smile: