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. this PR is not yet ready to merge.
@pksunkara the whole point of all these iterators and traverse is to change some attributes of 
`Payload`, changing this iterator to constant iterator would require to define `payload` as `const payload` which is against the whole logic.