Reduce the memory consumed by PropertyDescriptor instances

Maintain the flags (writable, configurable, etc) as bytes instead
of Objects and use constants instead of Strings for identifing
property names.

Because of the sheer amount of PropertyDescriptor instances that get
created and destroyed this actually results in a non-trivial amount of
memory and CPU savings in simple tests.
Avoid duplicating PropertyDescriptor instances where possible

This commit drastically cuts down on the number of PropertyDescriptor
instances created - about 1/4th as many in my testing. This also seems
to save around 25% overall heap usage on a couple of dynjs-spec tests
sampled.
No need to calculate the global object every time we ask for it
Don't use anonymous classes to initialize PropertyDescriptor objects

This cuts down on the # of classes loaded by DynJS as well as
inreasing performance of code paths that used the anonymous classes.
Don't use anonymous classes to initialize CodeBlock objects

Similar to the change for PropertyDescriptors, we can keep the number
of classes loaded by DynJS to a minimum by not creating anonymous
classes unnecessarily.