Refactor palmc/codegen.py and fix repeated __contains__ methods

Fixes bumptech/palm#9
Use __slots__ to reduce memory usage.

Saves around 10% of RAM when using many protos.
Merge pull request #11 from schmichael/multiple-contains

Refactor palmc/codegen.py and fix repeated __contains__ methods
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.