Handle pinned lockfile dependencies with versions

A lockfile dependency entry can contain both a version and a ! for
pinning.  This case had not been encountered previously but is now.

Fixes #1054
Sort lockfile platforms by string value

Platforms are not ordered but we want consistent output for testing so
just sort by string order.
Ignore URI parse errors for source subclasses

Not all subclasses need a URI so ignore the parse error as they may do
their own thing.

Fixes #1054