The art gallery theorem: its variations, applications and algorithmic aspects