Clean up Phone module

Lots of good changes:

-   Return a (String, String, String) instead of (String, (String,
    String)) from parts and use pattern matching to extract values from
    it.
-   Use guard clauses instead of nested conditionals.