I suggest the initializer call signature be
```
__init__(name, orientation=None, ang_velocity=None, ang_acceleration=None, position=None, velocity=None, acceleration=None, coordinate_variables=None, indices=None, latex_strs=None, dim=3, time=None)
```
where orientation is supplied as (Parent, Type, Amounts); e.g. (N, 'Body123', [q1,q2,q3]) or (N, 'Space313', [q1, q2, q3]) or (N, 'Axis', [q1, e_n_x]) or (N, 'euler', [q0, q1, q2, q3]).

Also, angular velocity/accerlation and position/velocity/acceleration are supplied as: (None, [], 0)
or rather (Parent, [b_1, b_2, b_3], non_body_vector_component). For example:
```
A = MovingRefFrame('A', orientation=some_rotation_info, ang_velocity=(N, [w_1, w_2, w_3], 0), position=(N, [0, 0, 0], l*e_n_x), velocity=(N, [u1, u2, 0], u3*N.z))
```
In fact, I think that only the name, orientation, position, and (maybe) velocity should be in there, everything else should be a keyword arg, leaving the call signature as
```
__init__(name, orientation=None, position=None, velocity=None, **kwargs)
```

This is not going to be the prettiest thing, but I think it will contain all relevant information within the initializer, allowing for immutability.