Make program objects track defines.

Program objects will now track defines. The htab for defines will be passed
to the parser module in future committs, which will scan and replace any
instances of the defined string.

Possible modifications in future commits:
* Do not use an htab for defines; rather a list of structs with a key/val
* Use the integer value allocated for htab elements as a pointer to the
  value string instead of an integer.