Adds base types for Smalltlak instruction API

Commit provides basic data structures for
operating Smalltalk bytecodes in a friendly way.

Base concept is stolen drom the LLVM and other
software which deals with basic blocks and so on.

Issue: #32
Adds ParsedMethod::parse()

Parse method provides a way for translating
compiled Smalltalk method into intermediate
form convinient for analysis and modification.

After method is parsed, one may traverse it
using basic block or instruction iterators.

Issue: #32
Adds block and instruction visitors

Issue: #32
Adds block offset field

Issue: #32
Adds ParsedBlock class and actual parsing code

Issue: #32
Extracts common interface out of ParsedMethod and ParsedBlock

Issue: #32
Adds ParsedMethod::block_iterator to traverse nested parsed blocks

Issue: #32
Adds visitor for traversing parsed blocks

Issue: #32
Adds block return detector

Issue: #32
Adds control graph API

ControlGraph represents method's instruction as a graph
where each instruction is linked to others in specific
order which reflects control and data flow.

Later this information will be used for type inference.

Issue: #32
Adds first stage of control graph generation procedure

Issue: #32
Adds DomainVisitor for iterating control graph domains

Issue: #32
Adds BasicBlock reference API

This commit adds reference information to the BasicBlocks so that it knows
which basic blocks are referencing it by jumping to the first byte offset
of the current basic block. Information is collected during bytecode parsing.

Additionally, some functions are added for the TSmalltalkInstruction which
helps classifying instructions during iteration.

These functions are used in higher level control flow analysis API.

Issue: #32
Adds second stage of control graph generation procedure (graph linker)

Issue: #32
Linker now adds branching edges to control graph and phi node fix

Issue: #32
Adds NodeVisitor for easy iteration through control graph nodes

Issue: #32
Adds global node index parameter to aid iterators

std::set<> container stores items in an particular order
which is determined by provided comparator or default std::less.

We compare nodes by their indices that are sequentially assigned
by ControlGraph upon node creation. See the NodeIndexCompare functor.

This ensures that node iterators and visitors will provide nodes
in sequence of their creation or in other sequence which may be
defined by specifying custom comparator for separate containers.

Issue: #32
Linker now add edges to link node islands within domain

Issue: #32
Adds recursive domain processing in GraphLinker

Issue: #32
Adds InstructionDecoder class

It is a helper class that performs instruction
decoding in an explicit manner.

Previous implementation were encapsulated in
TSmalltalkInstruction's decoding constructor
which was not intuitive.

Explicit use of InstructionDecoder is recomended
in places that iterate through bytecode instructions.

Issue: #32