Calendar.Timezone: Make compile() reentrant.

Each time compile() was called an additional set of rules
was appended. This could be triggered when a zone had
compilation errors.

Also fixes issue with throwing broken errors from compile().