[wip] Eitherを作る

- [x] `Either(const Right& right);`
- [x] `Either(Right&& right);`
- [x] `Either(LeftTag, const Left& left);`
- [x] `Either(LeftTag, Left&& left);`
- [x] `Either(RightTag , const Right& right);`
- [x] `Either(RightTag, Right&& right);`
- [x] `Either(const Either& either);`
- [x] `Either(Either&& either);`
- [x] `Either& operator=(const Either& either);`
- [x] `Either& operator=(Either&& either);`
- [x] `void swap(Either&);`
- [x] `bool is_left() const;`
- [x] `bool is_right() const;`
- [x] `const Left& left_value() const;`
- [x] `const Right& right_value() const;`
- [x] `explicit operator bool() const;`
- [x] `const Right& operator*() const&;`
- [x] `Right& operator*() &;`
- [x] `Right&& operator*() &&;`
- [x] `const Right* operator->() const;`
- [x] `Right* operator->();`
- [x] `bool operator==(const Either&, const Either&);`
- [x] `bool operator<(const Either&, const Either&);`
- [x] `void swap(Either&, Either&);`