Support lazy referencing

this PR would make the snowcrash able to recognize references which has been defined after the location of the usage. closes issue #84.
Also just to make it clear: The purpose of this struct is two-fold:

1. Provide a more robust, and future-proof data structure for describing references as they were written in the source file regardless. This is not only resource model specific but should cover MSON type references (and any other possible future references)

2. Provide the room for parser's internal data necessary for the reference parsing and / or resolving 

These two purposes should be clearly separated. While `identifier` and `type` fulfill the first role the resolution `state` and source map `node` are more internal parser things. 

For this reason the structure was designed as 

```
struct Reference {

    struct Identifier {
        Identifier identifier;
        Type Type
    };


    Identifier id;

    ...parser internal stuff here..

};
```

to clearly draw the line. I would suggest you to keep it as I have proposed it (or perhaps swap it and keep the parser's stuff in the nested internal structure). However I will leave the final decision on @pksunkara