Mover.tags() checks for invalid input.

tags must be a dictionary and it must not be empty, every key in the
dictionary must be a string and must not be empty, if any of these
conditions are not met then raise InvalidTagFormat exception.
Raise exception on non existing tags when substituting.

Mover.substitute() now checks if a tag exists before trying to change
anything and raises an error if it can't find anything.
Fix bug where getkeywords() would stop at symbols.

getkeywords would only grab a keyword untill a symbol example
%some/thing% will only catch some, fixed that by modifying the regex and
making it check for extra % chars aswell, error checking on this part
should be left to other methods.
Merge branch devel.

Check errors in Mover()
Raise an exception when tags are not a string or are empty.
Raise an exception when trying to substitute for a tag that does not Exist.