added generic currency check

Made sure that explicit currency declarations work

First detected currency will no longer be necessarily overwritten

If we were to leave max = 0 and there were multiple matches, then
no matter what else was in the matches array, the 0th element would
*never* be selected. This is because the length of any nonblank string
is greater than zero.

extracted best match finding to method

Moved find best match method

Added tests for ZAR

Also, rebased into one commit