Use __slots__ to reduce memory usage.

Saves around 10% of RAM when using many protos.
Test for false modifying bug.

The bug is that the _evermod flag gets set to True (and thus calls to
modified()) whenever a repeated field is accessed. This will lead to
extra work when saving unmodified protobufs and also false information
when applications make the modified() call.
Fix for false modifying bug.

The _get_repeated method now calls the descriptor _set_<name> method
directly and passed a modifying=False flag that passes through to the
instance._evermod flag. By default, modifying=True so any standard
setattr-type-calls will result in _evermod being True. In this special
case where the field is constructed internally we don't want that flag
to be True though.
Don't just pass `modifying` through to `_evermod`.

Doing that was overwriting previously modified state when accessing a
repeated after making a modification to another field.
Hook into list mutation for slices set/del.

This fixes another case where a protobuf could be mutated and _evermod
wouldn't reflect the true state of the object.
A couple streaming fixes.

1. Don't set 'foo' when 'foo__stream' is accessed. Previously that set
action was happening and it was leading to weirdness like the inability
to call 'dumps()' due to the partial objects in 'foo' and also
overwriting any values that were added to 'foo' before 'foo__stream' was
accessed.

2. If 'foo' was accessed before 'foo_stream', wrap the contents of 'foo'
in callables and return them. No real streaming happens, but it respects
the interface and returns the latest data for 'foo' instead of whatever
was in the buffer.
Add instructions for running tests
Revert "Merge pull request #11 from schmichael/multiple-contains"

This reverts commit fc50702b08f8fdbd60ebf2d900ca25c83e375354, reversing
changes made to 54f6ca1fd117eca53c8ab1fb68640b66d4b94672.
Merge remote-tracking branch 'origin/master'
Merge pull request #14 from schmichael/dev-docs

Add instructions for running tests
Merge pull request #12 from dowski/master

Fix For False Modifying Bug
Merge remote-tracking branch 'origin/master'
Merge branch 'master' into slots

Conflicts:
	palm/palmc/codegen.py
Add an update function to palm
Merge pull request #15 from wmoss/master

Add a function to update one pb from another
Merge branch 'master' into slots
Add script used to check memory use

The results of running the script against the code in master and this
branch show around 32% less memory used in the slots branch:

    # 10k Test objects (master)
    $ python check_mem.py
    baseline 33300 7400
    10k 258136 232324

    # 10k Test objects (slots)
    $ python check_mem.py
    baseline 33296 7416
    10k 183844 157884
Merge pull request #19 from dowski/slots

Reduce Memory Overhead With __slots__
Test for #8

Demonstrates that you can't use a value from an enum defined within a
message as a default value for an optional field in that message.
Fix for #8 (enums as default values)

Names for default values now get wrapped in a Reference instance which
is treated specially in codegen and allows for proper namespacing of
enum values as defaults.