Address: Modified interface so that any instance of Address is valid

- Modifies interface so that any instance of an Address can be assumed to be valid
- Adds documentation to each function
- Moves `fromString`, `fromPubkey` methods to be static (no need to be on newly instantiated objects)
- Adds additional `fromPubkeyHash` and `fromScriptHash` instantiators
- Adds tests coverage to address