Const-correct Target::getDistance()

The target object has no need to be non-const, so I've set it to const.
Make sure our difficulty starts at 0.

Enums are not supposed to have defined values besides enum2 = enum1 + 1.
So the starting value can be anything. Fixed it to 0 now, since that's kind of
assumed throughout the code.
Delay alien missions on UFO interception.

If the UFO is shot down (crashed or destroyed) the next wave is delayed.
Allow search of regions by location.

The code for this is in SavedGame instead of Ruleset, since we have many loops
that need the actual Region object.
Allow creating a BriefingState without a craft.

This must only happen when the mission type is STR_BASE_DEFENSE.
Added const version of SavedGame::getBases().

Having const getters allows better code generation.
Fix for BriefingState.

Base defenses don't have an XCOM craft. Don't count on the pointer be always
valid.
Implemented Retaliation missions.

- XCOM based are now properly detected by UFOs.
- Mission UFOs spawn correctly.
- If we have a target, the assault ship is spawned properly and attacks the
  base.
- Optional: You can have the aliens remember all detected bases, not just one
  per region. Just set 'aggressiveRetaliation' option to 'true'.

Missing:
- Base defenses are not used.
- Alien item level is always 0.

Differences from original game:
- You can't have another retaliation mission in the same region until final UFO
  lands. In original it appears you could have a new Retaliation in the zone as
  soon as the final Battleship spawned.
- You can only stop the retaliation if NO detected XCOM bases are in the region
  when the final Battleship tries to spawn, OR if the detected base is removed
  after it spawns, but before it lands. In original you could stop the mission
  if you removed the base at any time.
Initial Commit

adds the "Base Under Attack!" screen.
Call BaseDefense state as required.

I think that's everything.
Proper spawning of XCOM Base Defense missions.

Retaliation works until the Base Defense mission starts.
Proper Target management in UFOs.

We only want to delete our destination if it's a waypoint. The other types of
targets are now owned by the UFO.
Better code documentation.

Added documentation to code written for the alien missions.
Fixed mission delay on UFO interception.

We were adding a delay twice, changed the code to only delay in
AlienMission::ufoShotDown() and use the correct formula.
Assign unique ID to each active alien mission.

The [region, type] combination is not unique for alien supply missions. So just
use a unique ID for all missions.
Better const-correctness.

Our function objects should have operator() declared const, since it doesn't
modify the function objects themselves.
Fixed countdown to be like original game.

- Landed UFOs can take of any time.
- Crashed UFOs can only expire at :00:00 and :30:00.
- TerrorSites can only expire at :00:00 and :30:00.
Fix Ufo misunderstanding.

UFOs can marked destroyed when they leave the Earth. In this case, we still need
their name!
Fixed Supply missions

Supply ships are now scheduled according to formula provided by Volutar.
Merge pull request #228 from karvanit/AlienMissions

Implemented Supply missions