added declaration backtrace to allow for complex type declarations

now when encountering unknown identifier, parser will attempt to
    parse as a declaration, if this fails, it will unwind and parse
    as an expression. this allows for distinguishing things like array
    declarations (ID [ EXPR ] ID) from array expressions (ID [EXPR] BINOP ...)

structs no longer require 'forward' declaration