Make ConsensusSnapshot Immutable

* Mark CurrencyID as final and cloneable
* sourceURI instead of sourceURL
* Clean up usage in various places to work with Immutable
* Add simple test Spec