Refactor all inner classes to static inner classes

We really don't need them to be inner classes since we never access
the this variable.

See #2.
Add the initial value only on the initial start node

Basically we determine the start node from the CFG and only add the
initial StaticShapeGraph on that node. This also allows us to easily
check that propagation is working if we just use an
IdentityTransferFunction.

See #2.
Make a static copy of SSGIdentity

Since all functions are stateless, we just use one instance of
SSGIdentity.

See #2.