Fix span text splatting

When using dsl.span(*["foo", "bar"]), the last splat value
was being assigned to the opts argument of dsl.span

The fix is to check if opts is a Hash. If it is, keep it.
Otherwise push opts into the splat and set opts to an empty Hash
Use built-in pop_style
Merge pull request #587 from phansch/FixSpanLink

Fix span text splatting