Use a string pool to decrease memory footprint

We were strdup'ing the same strings multiple times. By keeping a
string pool of all string references, we are decreasing the amount
of memory used.

Using fedora's policy, we have decreased peak memory usage from ~260 MB
to ~207 MB. Additionally, this patch has a negative impact on
performance, albeit a minimal one. The time to compile fedora policy has
increased by 3.87%.

Signed-off-by: Yuli Khodorkovskiy <ykhodorkovskiy@tresys.com>