Refactor transaction class

I'm thinking we should either have this be `publicKey` or `toPublicKey` but not both. Which is better? Following this pattern though, toAddress would be `.address` instead of `toAddress`. `toPublicKey` makes the most sense to me, however calculating it each time isn't good, which this solves.