Use Moose best practice

As defined in Moose::Manual::BestPractices

Specifically:
1. Auto clean to remove imported symbols.
2. Make immutable for performance improvement, since we don't need to
modify the class later.
3. Make attributes required or set sensible defaults.