Awful.rules refactor

This PR merge Tyrannical extra properties with awful.rules. So now, 'master', 'slave', 'centered' and 'new_tag' are allowed. Using 2 API only caused frustrations for users who wanted the properties without having to use Tyrannical. I also took time to add extra check for some of the properties, hence all the extra code.

apply_properties return a set of tags, this is required to eventually merge with Tyrannical logic.

This is for master only and had very limited testing. 

This replace another commit from an old pull request