Fix issue #15 by implementing a DOM-based table parser

Now we can handle table with both colspan and rowspan.