Some optimizations and code refactor

## Optimizations
The python applications now only saves the alarm state that is defined in the `.cfg` file. In other words, it only cares about zones and partitions defined in the `.cfg` file. If a zone or partition is not in the `.cfg` file, then these are discarded. This reduces the amount of data sent by the /api endpoint. The justification here is that if the user cares about a zone/partition then said user should define it in the `.cfg` file. In my personal case I have a total of 5 zones that are actually wired to the system, reporting 64 seemed unnecessary.

Another optimization is related to saving and reporting duplicate events to the local Envisalink client `_alarmstate` variable (previously `ALARMSTATE`). With these commits, the only events that are reported to the user (and also saved to `lastevents`) are those which change the state of the alarm (zone, partition). If an alarm event is received but doesn't change the already existing alarm state, it will not be saved.

## Refactor
The most apparent change is the split of the code into separate files. The files `Envisalink.py` and `HTTPChannel.py` each have only their relevant code. This makes the alarmserver.py a little easier to read.

I also added some comments and used the python logging module to log to file and out to the console. The console logger writes all messages (level DEBUG), while the file logger logs only level INFO and above.

## Misc
I bumped the `_alarmstate` version to 0.2 because the event `code` is now saved to `lastevents` along with the timestamp and message. The front end javascript needs no update.